在 altair 中将图例添加到分层图表
Adding legend to layerd chart in altair
考虑以下示例:
import altair as alt
from vega_datasets import data
df = data.seattle_weather()
temp_max = alt.Chart(df).mark_line(color='blue').encode(
x='yearmonth(date):T',
y='max(temp_max)',
)
temp_min = alt.Chart(df).mark_line(color='red').encode(
x='yearmonth(date):T',
y='max(temp_min)',
)
temp_max + temp_min
在生成的图表中,我想添加一个图例,蓝线显示最高温度,红线显示最低温度。实现此目标的最简单方法是什么?
我看到(例如,在这个问题的解决方案中:)如果在编码中设置 color 或 size 左右,通常有一个分类列,但这在这里是不可能的,因为我正在绘制整个列并且标签应该是列名(现在显示在 y 轴上标签)。
我会做一个 fold transform 以便变量可以正确编码。
import altair as alt
from vega_datasets import data
df = data.seattle_weather()
alt.Chart(df).mark_line().transform_fold(
fold=['temp_max', 'temp_min'],
as_=['variable', 'value']
).encode(
x='yearmonth(date):T',
y='max(value):Q',
color='variable:N'
)
如果您将具有相同列的两个图表分层并告诉它们用相同的颜色着色,就会出现图例。不知道这是否有帮助,但是..
例如,我有:
范围、数量、类型
0_5, 3, 'Private'
5_10, 5, 'Private'
范围、数量、类型
0_5, 3, 'Public'
5_10, 5, 'Public'
我用“color = 'Type'”绘制了图表,并说 alt.layer(chart1, chart2) 它向我展示了一个正确的图例
考虑以下示例:
import altair as alt
from vega_datasets import data
df = data.seattle_weather()
temp_max = alt.Chart(df).mark_line(color='blue').encode(
x='yearmonth(date):T',
y='max(temp_max)',
)
temp_min = alt.Chart(df).mark_line(color='red').encode(
x='yearmonth(date):T',
y='max(temp_min)',
)
temp_max + temp_min
在生成的图表中,我想添加一个图例,蓝线显示最高温度,红线显示最低温度。实现此目标的最简单方法是什么?
我看到(例如,在这个问题的解决方案中:
我会做一个 fold transform 以便变量可以正确编码。
import altair as alt
from vega_datasets import data
df = data.seattle_weather()
alt.Chart(df).mark_line().transform_fold(
fold=['temp_max', 'temp_min'],
as_=['variable', 'value']
).encode(
x='yearmonth(date):T',
y='max(value):Q',
color='variable:N'
)
如果您将具有相同列的两个图表分层并告诉它们用相同的颜色着色,就会出现图例。不知道这是否有帮助,但是..
例如,我有:
范围、数量、类型
0_5, 3, 'Private'
5_10, 5, 'Private'
范围、数量、类型
0_5, 3, 'Public'
5_10, 5, 'Public'
我用“color = 'Type'”绘制了图表,并说 alt.layer(chart1, chart2) 它向我展示了一个正确的图例