微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

图中的 Altair 缺失值

如何解决图中的 Altair 缺失值


我想使用 altair 可视化数据框。 它是一个图形中的一条线和一个条形图,为我的数据框中的每个组 (ID) 绘制。 我的数据框缺少值。根据 https://altair-viz.github.io/user_guide/transform/impute.html 跳过缺失的条目,并在缺失的数据点上画一条线。 这实际上是我想要的,但是根据我的数据,这似乎不起作用。 我的折线图中缺少值。 我准备了一个简单的例子来解释我的问题:
import altair as alt
import numpy as np

#create dataframe
df = pd.DataFrame({'date': ['2020-04-03','2020-04-04','2020-04-05','2020-04-06','2020-04-03','2020-04-06'],'ID': ['a','a','b','b'],'bar': [np.nan,8,np.nan,np.nan],'line': [8,10,4,5,6,7] })

df:
         date ID  bar  line
0  2020-04-03  a  NaN   8.0
1  2020-04-04  a  8.0   NaN
2  2020-04-05  a  NaN  10.0
3  2020-04-06  a  NaN   8.0
4  2020-04-03  b  NaN   4.0
5  2020-04-04  b  8.0   5.0
6  2020-04-05  b  NaN   6.0
7  2020-04-06  b  NaN   7.0

# create graph
bars = alt.Chart(df).mark_bar(color="grey",size=5).encode(
         alt.X('monthdate(date):O'),y='bar:Q')

lines = alt.Chart(df).mark_line(point=True,size=2,).encode(
            alt.X('monthdate(date):O'),y='line:Q')

alt.layer(bars + lines,width=350,height=150).facet(facet=alt.Facet('ID:N'),).resolve_axis(y='independent',x='independent')

它给出了这个图像

enter image description here

有谁知道为什么这条线有一个中断 (a) 以及如何通过丢失的数据点绘制这条线? 我知道我可以使用“估算”来计算平均值并替换缺失值。 但这意味着该日期的数据点实际上并非如此。

感谢您的任何提示、想法或帮助!

解决方法

这是因为您在数据框中将值记录为 NaN,因此此观察有一个有效的日期条目,并且无法绘制 y 轴的 NaN。

这是您目前拥有的:

df = pd.DataFrame({'date': ['2020-04-03','2020-04-04','2020-04-05','2020-04-06','2020-04-03','2020-04-06'],'ID': ['a','a','b','b'],'line': [8,np.nan,10,8,4,5,6,7] })

alt.Chart(df).mark_line(point=True,size=2,).encode(
            alt.X('monthdate(date):O'),y='line:Q')

enter image description here

如果你去掉 NaN,你会得到你想要的行为

alt.Chart(df.dropna()).mark_line(point=True,size=2).encode(
            alt.X('monthdate(date):O'),y='line:Q')

enter image description here

对于上面的示例,如果您希望条形图保留所有值并且不删除行列中带有 NaN 的行,同时仍然使用图层和分面,则需要在两个图表中引用相同的数据框并使用 Altair 的 { {1}} 而不是熊猫 transform_filter

dropna

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。