legend - 我们可以在 Altair 的交互式折线图中添加交互式图例吗?
问题描述
目标:
- 在折线图中鼠标悬停时,增加线条的粗细,使所有其他线条变灰,并使图例中的所有其他项目也变灰。请参阅交互式折线图。
- 单击图例时,增加线条的粗细,使所有其他线条变灰,并使图例中的所有其他项目也变灰。请参阅交互式图例。
我们可以在下面的交互式折线图中添加交互式图例吗?
ISSUE: line-width 不会随着 legend 上的选择而改变。
from vega_datasets import data
source = data.stocks()
highlight = alt.selection(type='single', on='mouseover',
fields=['symbol'], nearest=True)
selection = alt.selection_multi(fields=['symbol'], bind='legend', on='mouseover')
base = alt.Chart(source).encode(
x='date:T',
y='price:Q',
color='symbol:N',
tooltip=['symbol']
)
points = base.mark_circle().encode(
opacity=alt.value(0)
).add_selection(
highlight
).properties(
width=600
)
lines = base.mark_line().encode(
opacity=alt.condition(selection, alt.value(1), alt.value(0.2)),
size=alt.condition(~highlight, alt.value(1), alt.value(3))
).add_selection(selection)
points + lines
解决方案
为什么要使用两层?
from vega_datasets import data
import altair as alt
source = data.stocks()
selection = alt.selection_multi(fields=['symbol'], bind='legend')
base = alt.Chart(source).mark_line(point=True).encode(
x='date:T',
y='price:Q',
color='symbol:N',
tooltip=['symbol'],
opacity=alt.condition(selection, alt.value(1), alt.value(0.2)),
size=alt.condition(~selection, alt.value(1), alt.value(3))
).add_selection(
selection
)
base
推荐阅读
- python - Boto3 按组 id 删除安全组
- vue.js - 如何使用 vuex 仅修改存储中的嵌套数组属性
- highcharts - highcharts 导出服务器 - 带有 curl / POST 的变量饼图
- notepad++ - 用记事本++中的增量计数器替换特定单词 - 定义计数器的起点
- matlab - 如何在 symfun 类型的函数上使用 matlab 中的 interp1 函数?
- python - 我无法使用 exchangelib 读取交换日历
- regex - 处理带有可选分隔符的行
- php - 占位符不选择数据的问题
- android - 反应原生未定义不是一个函数(评估'_app2.default.auth()')
- spring-webflux - 使用 subscribeOn 和 publishOn 时的最佳实践