垂直拼接两个Altair图表时如何避免图例合并?
问题:Altair垂直拼接图表时阻止图例合并
当执行msft_plot & all_plot垂直拼接两个图表时,两个图表的图例被自动合并,如何让每个图表保留独立的图例?
解决方案
有两种常用方法可以实现:
方法1:为每个图表的颜色图例设置不同标题
通过给两个图表的color编码指定不同的图例标题,让Altair识别为不同的图例,从而避免合并:
import altair as alt from vega_datasets import data import polars as pl # 为数据添加年份列 source = pl.from_pandas(data.stocks()).with_columns(year=pl.col.date.dt.year()) # MSFT专属图表:设置图例标题为“年份” msft_plot = ( alt.Chart(source.filter(pl.col.symbol.eq("MSFT"))) .mark_line() .encode( x="date:T", y="price:Q", color=alt.Color("year:O", legend=alt.Legend(title="年份")) ) ) # 全公司图表:设置图例标题为“公司” all_plot = ( alt.Chart(source) .mark_line() .encode( x="date:T", y="price:Q", color=alt.Color("symbol:N", legend=alt.Legend(title="公司")) ) ) # 垂直拼接图表 msft_plot & all_plot
方法2:强制分离颜色比例尺
在拼接图表时,使用resolve_scale(color='independent')告诉Altair不要共享颜色比例尺,这样两个图表的图例会独立显示:
import altair as alt from vega_datasets import data import polars as pl # 为数据添加年份列 source = pl.from_pandas(data.stocks()).with_columns(year=pl.col.date.dt.year()) # MSFT专属图表 msft_plot = ( alt.Chart(source.filter(pl.col.symbol.eq("MSFT"))) .mark_line() .encode(x="date:T", y="price:Q", color="year:O") ) # 全公司图表 all_plot = ( alt.Chart(source) .mark_line() .encode(x="date:T", y="price:Q", color="symbol:N") ) # 垂直拼接并设置颜色比例尺独立 (msft_plot & all_plot).resolve_scale(color='independent')
内容的提问来源于stack exchange,提问作者bzm3r
相关产品推荐
相关产品推荐

