Python Altair,`mark_line()`,_ignore_ NaN 而不是_skipping_ 它们或将它们视为 0?
Python Altair, `mark_line()`, _ignore_ NaN instead of _skipping_ them or treating them as 0?
据我所知,例如 here,Altair 处理 NaN 的仅有两种方式是 "filter"
或 None
。在mark_line()
的上下文中,"filter"
意味着NaN将被跳过,这意味着行中会有一个中断,而None
意味着 NaN 将被视为零,这在我的应用程序中会很疯狂 LOL。画线的时候有没有办法让Altair ignore, not skip, NaNs?这样中间的线才不会断?
我知道我总是可以在绘制线条之前手动从 Pandas Dataframe
中删除 NaN,但是当我想绘制多个列时,这会非常不方便同时,每个在不同的地方都有 NaN。据我所知,几乎不可能绘制 和 有一些不错的东西,比如同时显示所有列值的悬停工具等等。
听起来您想使用 .transform_filter('isValid(datum.line)')
作为这两个答案:
- Connecting lines over NaNs without dropping entire rows from the dataframe
import pandas as pd
import altair as alt
pd.DataFrame({
'date': ['2020-04-03', '2020-04-04', '2020-04-05', '2020-04-06','2020-04-03', '2020-04-04','2020-04-05','2020-04-06'],
'ID': ['a','a','a','a','b','b','b','b'],
'line': [8,np.nan,10,8, 4, 5,6,7]
}).pipe(
alt.Chart
).mark_line(point=True).encode(
alt.X('monthdate(date):O'),
y='line:Q'
).transform_filter(
'isValid(datum.line)'
)
据我所知,例如 here,Altair 处理 NaN 的仅有两种方式是 "filter"
或 None
。在mark_line()
的上下文中,"filter"
意味着NaN将被跳过,这意味着行中会有一个中断,而None
意味着 NaN 将被视为零,这在我的应用程序中会很疯狂 LOL。画线的时候有没有办法让Altair ignore, not skip, NaNs?这样中间的线才不会断?
我知道我总是可以在绘制线条之前手动从 Pandas Dataframe
中删除 NaN,但是当我想绘制多个列时,这会非常不方便同时,每个在不同的地方都有 NaN。据我所知,几乎不可能绘制 和 有一些不错的东西,比如同时显示所有列值的悬停工具等等。
听起来您想使用 .transform_filter('isValid(datum.line)')
作为这两个答案:
- Connecting lines over NaNs without dropping entire rows from the dataframe
import pandas as pd
import altair as alt
pd.DataFrame({
'date': ['2020-04-03', '2020-04-04', '2020-04-05', '2020-04-06','2020-04-03', '2020-04-04','2020-04-05','2020-04-06'],
'ID': ['a','a','a','a','b','b','b','b'],
'line': [8,np.nan,10,8, 4, 5,6,7]
}).pipe(
alt.Chart
).mark_line(point=True).encode(
alt.X('monthdate(date):O'),
y='line:Q'
).transform_filter(
'isValid(datum.line)'
)