刻度与指导分辨率#
在创建复合图表时(见 分层和多视图图表),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')
在这种情况下,轴颜色充当伪图例。或者,如果您想要一个图例,必须应用过滤器和折叠。图例仅在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')
请注意,双轴图可能会对您数据中的关系产生误导。有关该主题的进一步阅读,请参阅反对双轴图的案例,作者是丽莎·夏洛特·罗斯特。