python - 使用日期 slider 创建 map 以显示值的进展

标签 python pandas matplotlib jupyter-notebook bokeh

我正在尝试使用日期 slider 创建一张 map ,显示全局范围内的渐进式锁定措施。到目前为止,我能够为静态日期创建 map ,但我对 slider 的尝试不起作用,因为它似乎只接受整数或 float 而不是日期范围 (Date_slider = pnw.IntSlider(start=0 ,end=365,value=0)

基本上,我想创建在这里找到的 map :https://www.bsg.ox.ac.uk/research/research-projects/coronavirus-government-response-tracker

import pandas as pd
import geopandas as gpd
import json
import matplotlib as mpl
import pylab as plt
from bokeh.io import output_file, show, output_notebook, export_png
from bokeh.models import ColumnDataSource, GeoJSONDataSource, LinearColorMapper, ColorBar
from bokeh.plotting import figure
from bokeh.palettes import brewer
import panel as pn
import panel.widgets as pnw
import descartes
output_notebook()
pn.extension()

读取形状文件

shapefile = '/Users/sam/Desktop/ne_110m_admin_0_countries/ne_110m_admin_0_countries.shp'
gdf = gpd.read_file(shapefile)[['ADMIN', 'ADM0_A3', 'geometry']]
gdf.columns = ['country', 'country_code', 'geometry']
gdf = gdf.drop(gdf.index[159])

读取数据

def get_dataset(name,key=None,Date=None):

df = pd.read_csv(r'/Users/sam/Desktop/Big Data Project/covid-stringency-index-2.csv')
        if Date is not None:
            df = df[df['Date'] == Date]
        #Merge dataframes gdf and df_2016.
        if key is None:
            key = df.columns[2]
        merged = gdf.merge(df, left_on = 'country', right_on = 'Entity', how = 'left')
        merged[key] = merged[key].fillna(0)    
        return merged, key

使用 matplotlib 绘图

datasetname='Lockdown Measures'
df,key = get_dataset(datasetname, Date='Jul 10, 2020')
fig, ax = plt.subplots(1, figsize=(14, 8))
df.plot(column=key, cmap='OrRd', linewidth=1.0, ax=ax, edgecolor='Black')
ax.axis('off')
ax.set_title('%s Jul 10, 2020' %datasetname, fontsize=25)
plt.tight_layout()
plt.savefig('test_map.png',dpi=150)

输出:/image/6GrbF.png

使用 Bokeh 绘图

def get_geodatasource(gdf):    
    """Get getjsondatasource from geopandas object"""
    json_data = json.dumps(json.loads(gdf.to_json()))
    return GeoJSONDataSource(geojson = json_data)


def map_dash():
    """Map dashboard"""
    
    from bokeh.models.widgets import DataTable
    map_pane = pn.pane.Bokeh(width=600)
    data_select = pnw.Select(name='dataset',options=list(df))
    Date_slider = pnw.IntSlider(start=0,end=365,value=0)
    def update_map(event):
        gdf,key = get_dataset(name=data_select.value,Date=Date_slider.value)        
        map_pane.object = bokeh_plot_map(gdf, key)        
        return
    Date_slider.param.watch(update_map,'value')
    Date_slider.param.trigger('value')
    data_select.param.watch(update_map,'value')
    app = pn.Column(pn.Row(data_select,Date_slider),map_pane)
    return app

app = map_dash()
app

最佳答案

关于python - 使用日期 slider 创建 map 以显示值的进展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62899151/

相关文章:

python - Discord.py 我想在服务器名称旁边添加服务器图标

Python 单词和短语的共现矩阵

python-3.x - Python 中带有字符串的 3D 散点图

python - 在 sklearn.metrics.plot_confusion_matrix 中抑制科学记数法

python - python 的 shutil.move() 在 linux 上是原子的吗?

python - 使用 python 的 Firestore 中的 GeoPoint

python - 使用 Python 自动输入以暴力破解在 cli 中运行的程序

python - &=、|= 和 ~ 在 Pandas 中做什么

python - Pandas DataFrame - 将系列字符串拆分为多列

python - 将 matplotlib.pylab 的 imshow 与 python ide 一起使用?