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)'
)