Altair - 使用第 n 列作为图中的输入变量
Altair - use nth column as input variable in graph
我想引用数据框的 nth 列,并将其用作使用 altair 绘制图形的输入。
代码如下所示:
#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] })
#define columns to be used
bb = df.columns[2]
ll = df.columns[3]
#make graph
bars = alt.Chart(df).mark_bar(color="grey", size=5).encode(
alt.X('monthdate(date):O'), alt.Y(bb))
lines = (alt.Chart(df).mark_line(point=True,size=2)
.transform_filter('isValid(datum.line)')
.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')
我管理了图表的“条形”部分。但我不确定如何在内部执行此操作
transform_filter
函数。我不想指定列名“line”,而是使用“ll”或数据框的第 3 列。
有办法吗?感谢您的帮助
datum
正在引用一个 javascript 对象,并且 I don't believe there is any way to access javascript object properties (like line
) by index rather than property name。但是,您可以使用 Python f-strings 构造字符串,它允许您在字符串中需要的地方替换变量值:
.transform_filter(f'isValid(datum.{ll})')
Altair (second example here) 中也有一个 expr
模块,但我想不出比上面更容易使用的方法。
我想引用数据框的 nth 列,并将其用作使用 altair 绘制图形的输入。
代码如下所示:
#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] })
#define columns to be used
bb = df.columns[2]
ll = df.columns[3]
#make graph
bars = alt.Chart(df).mark_bar(color="grey", size=5).encode(
alt.X('monthdate(date):O'), alt.Y(bb))
lines = (alt.Chart(df).mark_line(point=True,size=2)
.transform_filter('isValid(datum.line)')
.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')
我管理了图表的“条形”部分。但我不确定如何在内部执行此操作
transform_filter
函数。我不想指定列名“line”,而是使用“ll”或数据框的第 3 列。
有办法吗?感谢您的帮助
datum
正在引用一个 javascript 对象,并且 I don't believe there is any way to access javascript object properties (like line
) by index rather than property name。但是,您可以使用 Python f-strings 构造字符串,它允许您在字符串中需要的地方替换变量值:
.transform_filter(f'isValid(datum.{ll})')
Altair (second example here) 中也有一个 expr
模块,但我想不出比上面更容易使用的方法。