gpt4 book ai didi

python-3.x - 如何将 slider 添加到 altair 中的等值线?

转载 作者:行者123 更新时间:2023-12-04 13:17:17 24 4
gpt4 key购买 nike

我正在尝试向我的等值线图添加一个 slider 。
slider 基于 2006 年到 2012 年的“年”
我的数据是这样的:
data
可以从这里下载:
sample_data.csv
当我绘制县级等值线时,它正在使用 transform_lookup
为县执行内部连接 ​​w.r.t fips 代码这是我的代码:

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', ['Pill_per_pop','year'])
).transform_calculate(
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=Scale(scheme='blues')),
alt.value('#dbe9f6')
)).add_selection(
select_year
).properties(
width=700,
height=400
).transform_filter(
select_year
)


这段代码给我一个带有 slider 的等值线图,但这些图是错误的。
我觉得它是 fips 代码的第一次出现,而不是根据年份进行过滤。
我觉得这是因为 transform_lookup 方法将县 ID 映射到 fips 代码。
这是输出:
enter image description here

enter image description here enter image description here enter image description here

最佳答案

您是正确的,查找转换仅找到第一个匹配的索引 - 它是单侧连接,而不是多连接。如果您想为每个键连接多个数据条目,则必须使用具有多列的数据集。

对于您的数据,您可以使用 pandas pivot 生成这样的数据集方法,然后在 Altair 中,您可以在查找后使用 fold transform 撤消此操作

对于您的数据,它可能看起来像这样:

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
)

enter image description here

关于python-3.x - 如何将 slider 添加到 altair 中的等值线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59224026/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com