[英]Python: Altair: Conditionally change axis label appearance (color, opacity)
目前,Vega 不支持交互式轴标签,即通过单击轴标签创建选择(请参阅issue 1657 ),Altair 也不支持。
因此,我试图通过提供图例选择和更改轴标签的外观来找到解决方法。
我能够有条件地为标签着色(参见下面的代码示例)。
import altair as alt
from vega_datasets import data
source = data.unemployment_across_industries.url
selection = alt.selection_multi(fields=['series'], bind='legend')
alt.Chart(source).mark_bar().encode(
alt.X('series:N', axis=alt.Axis(labelColor=alt.condition('datum.value == "Finance"', alt.value('red'), alt.value('black')))),
alt.Y('sum(count):Q'),
alt.Color('series:N', scale=alt.Scale(scheme='category20b')),
opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
).add_selection(
selection
)
但是,在尝试使用选择而不是表达式时出现错误。
alt.X('series:N', axis=alt.Axis(labelColor=alt.condition(selection, alt.value('red'), alt.value('black')))),
有没有办法将标签外观连接到选择(这里:绑定到图例)?
没有找到动态更改轴标签的方法,但设法通过通过mark_text
显示轴标签来接近解决方案
bars = alt.Chart(source).mark_bar().encode(
alt.X('series:N', axis=alt.Axis(labels=False, title="")),
alt.Y('sum(count):Q'),
alt.Color('series:N', scale=alt.Scale(scheme='category20b')),
opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
).add_selection(
selection
)
labels = alt.Chart(source).mark_text(align='right', angle=270).encode(
alt.X('series:N', axis=None),
text='series:N',
opacity=alt.condition(selection, alt.value(1), alt.value(0.2))
).transform_aggregate(
groupby=["series"]
)
(bars & labels).configure(
concat=alt.CompositionConfig(spacing=0)
).configure_view(
strokeWidth=0
)
(仍然很想了解更好的解决方案。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.