Altair:合并图层图表中的图例

标签 altair vega-lite

我有一个编码颜色、大小和形状的点图。就其本身而言,所有三种编码都折叠为一个图例。然而,对共享相同颜色的折线图进行分层会导致下面出现重复的图例。将尺寸和形状标记为独立而将颜色标记为共享时没有区别。当我禁用折线图颜色编码中的图例时,[顶部]颜色图例和所有颜色信息都会消失。我能做什么?

layer chart with duplicate legends

rand = np.random.RandomState(0)
data = pd.DataFrame\
    ( rand.randint(100,500,(15,2))
    , index=[*["a"]*5,*["b"]*5,*["c"]*5]
    , columns=["x","y"]
    ).rename_axis("k").reset_index()

chart1 =\
    ( alt.Chart(data)
    . mark_point()
    . encode(x="x",y="y",color="k",shape="k",size="k")
    )

chart2 =\
    ( alt.Chart(data)
    . transform_regression
        ( on="x"
        , regression="y"
        , groupby=["k"]
        , method="poly"
        )
    . mark_line()
    . encode(x="x",y="y",color="k")
    )

chart =\
    ( (chart1 + chart2)
    . interactive()
    . properties(width="container")
    )

最佳答案

我认为这个问题没有什么好的答案。有一个关于它的悬而未决的问题 here .

一种解决方法是隐藏线条图例并将其他图例设置为独立:

import numpy as np
import pandas as pd
import altair as alt

rand = np.random.RandomState(0)
data = pd.DataFrame\
    ( rand.randint(100,500,(15,2))
    , index=[*["a"]*5,*["b"]*5,*["c"]*5]
    , columns=["x","y"]
    ).rename_axis("k").reset_index()

chart1 =\
    ( alt.Chart(data)
    . mark_point()
    . encode(x="x",y="y",color="k",shape="k",size="k")
    )

chart2 =\
    ( alt.Chart(data)
    . transform_regression
        ( on="x"
        , regression="y"
        , groupby=["k"]
        , method="poly"
        )
    . mark_line()
    . encode(x="x",y="y",color=alt.Color("k", legend=None))
    )

chart =\
    ( (chart1 + chart2)
    . interactive()
    ).resolve_scale(color='independent', shape='independent', size='independent')

enter image description here

关于Altair:合并图层图表中的图例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70386504/

相关文章:

python - 在 Altair 中合并两个图例

python - 如何为 Altair 生成的图表添加副标题

vega - 多一条记录,图表消失 - VL 是否有限制?

plot - Vega-Lite:添加不基于字段值/自动颜色/自动形状的自定义图例

d3.js - vega-lite:如何将 JSON 中的日期指定为包含年、月和日数字的单独字段?

用于可缩放时间线直方图的 Vega-lite 图表,具有动态 timeUnit binning

python - 在 Altair 图上,您能否更改显示选择(例如下拉菜单、单选按钮)的位置?

python - 无法在 folium map 中将 altair 可视化作为弹出窗口插入

javascript - 使用 JSON 和 Vega-lite 在散点图上绘制多个点

python - 交互式 Altair 图中的条形宽度