如何解决图中的 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')
有谁知道为什么这条线有一个中断 (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')
如果你去掉 NaN,你会得到你想要的行为
alt.Chart(df.dropna()).mark_line(point=True,size=2).encode(
alt.X('monthdate(date):O'),y='line:Q')
对于上面的示例,如果您希望条形图保留所有值并且不删除行列中带有 NaN 的行,同时仍然使用图层和分面,则需要在两个图表中引用相同的数据框并使用 Altair 的 { {1}} 而不是熊猫 transform_filter
:
dropna
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。