标尺与图例分辨率#
创建复合图表(参见 分层与多视图图表)时,Altair 默认使用共享的图表标尺和图例(例如轴、图例等)。可以使用 Chart.resolve_scale()
、Chart.resolve_axis()
和 Chart.resolve_legend()
函数调整此默认设置。
例如,假设你想连接两个使用不同颜色标尺的图表;默认行为是为两个颜色编码域的并集创建颜色标尺
import altair as alt
from vega_datasets import data
source = data.cars()
base = alt.Chart(source).mark_point().encode(
x='Horsepower:Q',
y='Miles_per_Gallon:Q'
).properties(
width=200,
height=200
)
alt.concat(
base.encode(color='Origin:N'),
base.encode(color='Cylinders:O')
)
可以通过将颜色的标尺分辨率设置为 "independent"
(独立),而不是默认的 "shared"
(共享)来更改此默认设置。
alt.concat(
base.encode(color='Origin:N'),
base.encode(color='Cylinders:O')
).resolve_scale(
color='independent'
)
双 Y 轴#
合并包含不同度量的图表时,一种常用技术是使用双 Y 轴。使用 Altair 有两种策略来实现这一结果。第一种是手动指定每个图层的标记颜色和相关的轴标题颜色。
import altair as alt
from vega_datasets import data
source = data.cars()
base = alt.Chart(source).encode(x='year(Year):T')
line_A = base.mark_line(color='#5276A7').encode(
alt.Y('average(Horsepower):Q').axis(titleColor='#5276A7')
)
line_B = base.mark_line(color='#F18727').encode(
alt.Y('average(Miles_per_Gallon):Q').axis(titleColor='#F18727')
)
alt.layer(line_A, line_B).resolve_scale(y='independent')
在这种情况下,轴颜色充当伪图例。或者,如果你想要图例,则必须应用 Filter 和 Fold。图例仅在 Vega-Lite 中创建以表示编码。
base = alt.Chart(source).mark_line().transform_fold(
['Horsepower', 'Miles_per_Gallon'],
as_=['Measure', 'Value']
).encode(
alt.Color('Measure:N'),
alt.X('year(Year):T')
)
line_A = base.transform_filter(
alt.datum.Measure == 'Horsepower'
).encode(
alt.Y('average(Value):Q').title('Horsepower')
)
line_B = base.transform_filter(
alt.datum.Measure == 'Miles_per_Gallon'
).encode(
alt.Y('average(Value):Q').title('Miles_per_Gallon')
)
alt.layer(line_A, line_B).resolve_scale(y='independent')
请注意,双轴图表可能会误导您理解数据中的关系。关于此主题的更多阅读,请参见 Lisa Charlotte Rost 的《反对双轴图表的论点》。