Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
世界地图&x2B;Altair中的滑块(Python)_Python_Plot_Charts_Jupyter Notebook_Altair - Fatal编程技术网

世界地图&x2B;Altair中的滑块(Python)

世界地图&x2B;Altair中的滑块(Python),python,plot,charts,jupyter-notebook,altair,Python,Plot,Charts,Jupyter Notebook,Altair,我想使用python中的Altair库,用世界地图和每个国家的新冠肺炎确诊病例和日期滑块构建一个交互式图表 数据格式: "country_region","date","confirmed_cases" "Afghanistan",2020-01-22,0 "Afghanistan",2020-01-23,0 "Afghanistan",2020-01-24,0 "A

我想使用python中的Altair库,用世界地图和每个国家的新冠肺炎确诊病例和日期滑块构建一个交互式图表

数据格式:

"country_region","date","confirmed_cases"
"Afghanistan",2020-01-22,0
"Afghanistan",2020-01-23,0
"Afghanistan",2020-01-24,0
"Afghanistan",2020-01-25,0
我已成功构建非交互式图表,但无法设置滑块。我的图表现在如下所示:

我想将滑块添加到所选日期,但无法正确设置

我使用
transform\u lookup
方法根据数据(确诊病例/人群)向国家/地区添加颜色,据我所知,当用户更改滑块位置时,应添加
transform\u filter
以执行数据过滤。但这不起作用。我的假设是,在
transform\u lookup
中,始终使用原始数据,过滤在那里不起作用。我还没有找到关于同时使用
transform\u lookup
和slider的示例或文档

如果您有什么想法可以帮助我解决这个问题,我将不胜感激

代码:

  • 您可以删除
    .transform\u filter(选择\u date)\
    行以查看带有滑块的工作地图,滑块不会改变任何内容

问题似乎是在Vega中,查找转换不会响应选择而动态重新计算。您可以通过切换主要数据源来解决此问题,以便所有时间戳都显示在最终联接的数据集中:

alt.Chart(df).mark_geoshape()\
.encode(color='rate:Q')\
.添加所选内容(选择日期)\
.转换过滤器(选择日期)\
.transform\u查找(
lookup='id',
from_u=alt.lookUpdatea(国家/地区,key='id',
字段=[“类型”、“属性”、“几何体”])
)\
.项目(“等矩形”)\
.物业(
宽度=500,
高度=300,
title='title'
)

谢谢,这很有帮助!
import requests
import json

import pandas as pd

import altair as alt
from vega_datasets import data
from altair import datum

df = pd.read_csv('https://raw.githubusercontent.com/MariaKokshaikina/any-data/main/covid19_global_confirmed_cases%20(1).csv')

country_info = requests.get(
    'https://raw.githubusercontent.com/MariaKokshaikina/any-data/main/country_info.json'
).json()

df = df[df['country_region'].isin(country_info)]
df = df.sort_values('date', ascending=True)
df = df.tail(5000)

def timestamp(t):
    return pd.to_datetime(t).timestamp() * 1000

df['id'] = df['country_region'].map(lambda x: country_info[x]['numericCode'])
df['rate'] = df['confirmed_cases'] / df['country_region'].map(lambda x: country_info[x]['population'])
df['timestamp'] = df['date'].map(timestamp)

countries = alt.topo_feature(data.world_110m.url, 'countries')

slider = alt.binding_range(
    step=24 * 60 * 60 * 1000,
    min=df['timestamp'].min(), 
    max=df['timestamp'].max()
)

select_date = alt.selection_single(
    name="slider", 
    fields=['timestamp'],
    bind=slider, 
)

alt.Chart(countries).mark_geoshape()\
    .encode(color='rate:Q')\
    .add_selection(select_date)\
    .transform_filter(select_date)\
    .transform_lookup(
        lookup='id',
        from_=alt.LookupData(df, key='id', fields=['rate'])
    )\
    .project('equirectangular')\
    .properties(
        width=500,
        height=300,
        title='Title'
    )