如何解决向 Altair 中的 Choropleth带滑块添加动态工具提示和标题
在 previous post 中,@jakevdp 在 altair 使用滑块(为方便起见粘贴在下方):
import altair as alt
import pandas as pd
from vega_datasets import data
us_counties = alt.topo_feature(data.us_10m.url,'counties')
fdf = pd.read_csv('https://raw.githubusercontent.com/sdaSara95/Opioid-Crisis/master/sample_data.csv')
fdf['year'] = fdf['year'].astype(str)
fdf = fdf.pivot(index='fips',columns='year',values='Pill_per_pop').reset_index()
columns = [str(year) for year in range(2006,2013)]
slider = alt.binding_range(min=2006,max=2012,step=1)
select_year = alt.selection_single(name="year",fields=['year'],bind=slider,init={'year': 2006})
alt.Chart(us_counties).mark_geoshape(
stroke='black',strokeWidth=0.05
).project(
type='albersUsa'
).transform_lookup(
lookup='id',from_=alt.LookupData(fdf,'fips',columns)
).transform_fold(
columns,as_=['year','Pill_per_pop']
).transform_calculate(
year='parseInt(datum.year)',Pill_per_pop='isValid(datum.Pill_per_pop) ? datum.Pill_per_pop : -1'
).encode(
color = alt.condition(
'datum.Pill_per_pop > 0',alt.Color('Pill_per_pop:Q',scale=alt.Scale(scheme='blues')),alt.value('#dbe9f6')
)).add_selection(
select_year
).properties(
width=700,height=400
).transform_filter(
select_year
)
我是 altair 的新手,想了解如何进行一些修改 到这个情节:
- 我们如何为该图添加随滑块值变化的标题 即“{slider_value_here} 年的药丸数量”?
- 如何将滑块标签更改为自定义为
yr
而不是当前的year_year
值? - 我们如何为每个县添加悬停工具提示,即 fips 值,如下所示 值,{year:{slider_year_value},fips:{fips_code_value_on_hover},number_pills:{Pill_per_pop}}?
- 我们如何向这个滑块添加动画小部件,例如有一个自动改变滑块值的播放按钮(可以在代码中控制时间)?
任何有关修改此代码的帮助都会非常有帮助。我确实尝试过
在不同的地方插入 tooltip
以使查询 3 工作,但无法做到
发生。
感谢任何帮助
解决方法
感谢您提供清晰且可重现的示例!只是提醒一下未来,将您的要点分解成单独的问题可能是个好主意,这样其他人在搜索时更容易找到它们。我不相信你想要的一切目前都可以在 Altair/Vegalite 中实现,但这是我最好的回答:
-
我们如何为该图添加随滑块值变化的标题,即“{slider_value_here} 年的药丸数量”?
我找到了 this comment mentioning that this is not possible for axis titles,所以我相信图表标题也不可能(虽然不确定)。另一种方法是插入一个小图表而不是标题并使用
mark_text
更新年份,similar to this example -
我们如何将滑块标签更改为自定义为 yr 而不是当前的 year_year 值?
在
binding_range
代替selection_single
中设置 name 参数,例如slider = alt.binding_range(name='yr ',min=2006,max=2012,step=1)
(名称旁边没有滑块的额外空间。 -
我们如何为每个县添加悬停工具提示,即 fips 值,具有以下值,{year:{slider_year_value},fips:{fips_code_value_on_hover},number_pills:{Pill_per_pop}}?
首先更改查找以获取 fips 列:
from_=alt.LookupData(fdf,'fips',columns + ['fips'])
然后将一个列表传递给工具提示,指示列类型,因为它们来自查找并且不在您传递给图表的主数据框中。
tooltip=['year:O','fips:Q','Pill_per_pop:Q']
-
我们如何向此滑块添加动画小部件,例如有一个自动改变滑块值的播放按钮(可以在代码中控制时间)?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。