图中的 Altair 缺失值
Altair missing value in graph
我想使用 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-04','2020-04-05','2020-04-06'],
'ID': ['a','a','a','a','b','b','b','b'],'bar': [np.nan,8,np.nan,np.nan, np.nan, 8,np.nan,np.nan],
'line': [8,np.nan,10,8, 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-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] })
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 的 transform_filter
而不是 pandas dropna
:
(alt.Chart(df).mark_line(point=True,size=2)
.transform_filter('isValid(datum.line)')
.encode(alt.X('monthdate(date):O'), y='line:Q'))
我想使用 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-04','2020-04-05','2020-04-06'],
'ID': ['a','a','a','a','b','b','b','b'],'bar': [np.nan,8,np.nan,np.nan, np.nan, 8,np.nan,np.nan],
'line': [8,np.nan,10,8, 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-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] })
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 的 transform_filter
而不是 pandas dropna
:
(alt.Chart(df).mark_line(point=True,size=2)
.transform_filter('isValid(datum.line)')
.encode(alt.X('monthdate(date):O'), y='line:Q'))