Altair 组合多个数据集
Altair combining multiple data sets
我最近才发现 Vega/Vega-Lite 和 Altair 并将其视为最佳 [=32] 的真正竞争者=] 绘图工具。
我目前正在努力解决的问题是将来自两个数据框的信息绘制到共享一个或两个轴的同一个图表中。
我试过类似的东西:
plot1 = alt.Chart(df1).mark_point().encode(x = 'time:T', y = [...])[...]
plot2 = alt.Chart(df2).mark_point().encode(x = 'time:T', y = [...])[...]
这行得通,但它很笨重而且不是很好。
我遇到了 LayerChart 对象,但从文档中我不太清楚如何正确使用它来绘制多个数据集。
- 有人有这种图表的例子吗?
- 我需要做什么才能获得双 y 轴?
具有不同数据集的图表可以与 Altair documentation 中描述的任何机制分层在一起。
例如:
import pandas as pd
import altair as alt
df1 = pd.DataFrame({
'times': [1, 2, 3],
'values': [1, 5, 4],
})
df2 = pd.DataFrame({
'times': [2, 3, 4],
'values': [4, 2, 3],
})
chart1 = alt.Chart(df1).mark_line().encode(x='times', y='values')
chart2 = alt.Chart(df2).mark_line().encode(x='times', y='values')
chart1 + chart2
通过在函数中分离图表逻辑来制作 DRYer 代码,然后迭代。
给定
import pandas as pd
import altair as alt
df0 = pd.DataFrame(dict(times=[1, 2, 3], values=[2, 2, 7]))
df1 = pd.DataFrame(dict(times=[2, 3, 5], values=[3, 9, 8]))
df2 = pd.DataFrame(dict(times=[3, 6, 8], values=[2, 6, 7]))
df3 = pd.DataFrame(dict(times=[6, 7, 9], values=[3, 2, 5]))
代码
def base_chart(df):
"""Return an Altair chart."""
# Add lengthy chart arguments here
base = alt.Chart(
df,
width=500,
height=300,
).mark_line(
).encode(
x="times",
y="values"
)
return base
def layer_charts(dfs, chart_func):
"""Return a layered chart."""
return alt.layer(*[chart_func(df) for df in dfs])
演示
layer_charts([df0, df1, df2, df3], base_chart)
我最近才发现 Vega/Vega-Lite 和 Altair 并将其视为最佳 [=32] 的真正竞争者=] 绘图工具。
我目前正在努力解决的问题是将来自两个数据框的信息绘制到共享一个或两个轴的同一个图表中。
我试过类似的东西:
plot1 = alt.Chart(df1).mark_point().encode(x = 'time:T', y = [...])[...]
plot2 = alt.Chart(df2).mark_point().encode(x = 'time:T', y = [...])[...]
这行得通,但它很笨重而且不是很好。
我遇到了 LayerChart 对象,但从文档中我不太清楚如何正确使用它来绘制多个数据集。
- 有人有这种图表的例子吗?
- 我需要做什么才能获得双 y 轴?
具有不同数据集的图表可以与 Altair documentation 中描述的任何机制分层在一起。
例如:
import pandas as pd
import altair as alt
df1 = pd.DataFrame({
'times': [1, 2, 3],
'values': [1, 5, 4],
})
df2 = pd.DataFrame({
'times': [2, 3, 4],
'values': [4, 2, 3],
})
chart1 = alt.Chart(df1).mark_line().encode(x='times', y='values')
chart2 = alt.Chart(df2).mark_line().encode(x='times', y='values')
chart1 + chart2
通过在函数中分离图表逻辑来制作 DRYer 代码,然后迭代。
给定
import pandas as pd
import altair as alt
df0 = pd.DataFrame(dict(times=[1, 2, 3], values=[2, 2, 7]))
df1 = pd.DataFrame(dict(times=[2, 3, 5], values=[3, 9, 8]))
df2 = pd.DataFrame(dict(times=[3, 6, 8], values=[2, 6, 7]))
df3 = pd.DataFrame(dict(times=[6, 7, 9], values=[3, 2, 5]))
代码
def base_chart(df):
"""Return an Altair chart."""
# Add lengthy chart arguments here
base = alt.Chart(
df,
width=500,
height=300,
).mark_line(
).encode(
x="times",
y="values"
)
return base
def layer_charts(dfs, chart_func):
"""Return a layered chart."""
return alt.layer(*[chart_func(df) for df in dfs])
演示
layer_charts([df0, df1, df2, df3], base_chart)