基于pyecharts结合少量html,css,js实现中外疫情可视化地图(带跳转)

 以下是运行的截图

1,中国疫情地图主页 (带跳转和时间轴)

2,中国3D地图(动态)

 3,世界疫情地图(带时间轴)

4,世界3D地图(动态)

5,跳转到省的地图(这里随便举两个例子)

 

是一个flask框架构成的整体,数据来源是网易的疫情数据,之前也在服务器上部署过,总的代码量大概在一千五百行左右,不加一些辅助性的csv文件,因为是第一次写,所以也不是很了解如何上传完整结构的代码,后期等熟练了就把代码也整上,先贴一部分代码把,现在先往gitee上存。有需要代码的可以联系我。

gitee链接:这里

代码

1,爬虫部分,一次性爬取多个数据

import requests
import pandas as pd
import time

url = 'https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=331570116174'
os_url = 'https://c.m.163.com/ug/api/wuhan/app/data/oversea-total?t=165805417706'

headers = {
# 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.114 Safari/537.36 Edg/103.0.1264.49'
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0'
}

response = requests.get(url,headers=headers)
os_response = requests.get(url=os_url,headers=headers)

def save_data(data,name):
    file_name = name+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
    data.to_csv(file_name,index=None,encoding='utf_8_sig')
    print(file_name+'保存成功')


def get_data(data,table_name,*args):
    heads = pd.DataFrame(data)[list(args)]
    today = pd.DataFrame([i['today'] for i in data])
    total = pd.DataFrame([i['total'] for i in data])
    today.columns = [f"today_{i}" for i in today.columns]
    total.columns = [f"total_{i}" for i in total.columns]
    table_name = pd.concat([heads, today, total],axis = 1)
    return table_name

def history_data(name,u_name,table_name):
    name_id = name[['name', 'id']].values.tolist()
    urls = [f"https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode={i[1]}&" for i in name_id]
    for index, item in enumerate(urls):
        response = requests.get(item, headers=headers)
        data = response.json()['data']['list']
        concat_data = get_data(data, 'concat_data', 'date')
        concat_data.insert(1, u_name, name_id[index][0])
        if index == 0:
            table_name = concat_data
        else:
            table_name = pd.concat([table_name, concat_data], axis=0)

        print(f"{name_id[index][0]}数据抓取完成,共获取到{concat_data.shape[0]}条数据")
    return table_name

#中国实时数据
china_total_now =pd.DataFrame(response.json()['data']['chinaTotal'])
china_total_now['lastUpdateTime'] = response.json()['data']['lastUpdateTime']
save_data(china_total_now,'china_total_now')

#世界实时数据
world_total_now = pd.DataFrame(os_response.json()['data'])
save_data(world_total_now,'world_total_now')

#省实时数据
prov_d = response.json()['data']['areaTree'][2]['children']
china_all_provinces_data_now = get_data(prov_d,'china_all_provinces_data_now',*['id','name','lastUpdateTime'])
save_data(china_all_provinces_data_now,'china_all_provinces_data_now')

#世界数据
country_d = response.json()['data']['areaTree']
world_all_country_data_now = get_data(country_d,'world_all_country_data_now',*['id','name','lastUpdateTime'])
save_data(world_all_country_data_now,'world_all_country_data_now')


#市实时数据
for z,j in enumerate(response.json()['data']['areaTree'][2]['children']):
    head = pd.DataFrame(j['children'])[['id','name','lastUpdateTime']]
    head['provinces'] = response.json()['data']['areaTree'][2]['children'][z]['name']
    today = pd.DataFrame([i['today'] for i in j['children']])
    total = pd.DataFrame([i['total'] for i in j['children']])
    today.columns = [f"today_{i}" for i in today.columns]
    total.columns = [f"total_{i}" for i in total.columns]
    cat_table = pd.concat([head, today, total],axis = 1)
    if z == 0:
        all_cities_data = cat_table
    else:
        all_cities_data = pd.concat([all_cities_data,cat_table],axis =0 )
save_data(all_cities_data,'all_cities_data')

#中国历史数据
china_history_data = response.json()['data']['chinaDayList']
china_history_datas = get_data(china_history_data,'china_history_datas',*['date'])
save_data(china_history_datas,'china_history_datas')


#中国各省历史数据
china_all_provinces_history_data = history_data(china_all_provinces_data_now,'province_name','china_all_provinces_history_data')
save_data(china_all_provinces_history_data,'china_all_provinces_history_data')


#世界各国历史数据
world_all_country_history_data = history_data(world_all_country_data_now,'country_name','world_all_country_history_data')
save_data(world_all_country_history_data,'world_all_country_history_data')

2,绘制中国地图(附加各种表格和时间轴)

import pandas as pd # 导入数据分析模块
import numpy as np # 导入科学计算模块
from pyecharts.charts import Bar, Map, Line, Pie, Grid, Timeline, WordCloud, Map3D,  MapGlobe  # 导入条形图,地图,折线图,玫瑰图 ,grid并行组图组件
from pyecharts import options as opts # 导入配置项模块
from pyecharts.globals import ThemeType # 导入主题模块


####################################################################################
data = pd.read_csv('china_all_provinces_history_data_2022_09_16.csv') # 读取数据,
data['date'] = pd.to_datetime(data['date']) # 将日期这一列数据,设置为datatime64[ns]格式
data.set_index('date',inplace=True) # 将日期设置为索引

date_list  = pd.DataFrame(pd.date_range('2022-07-01','2022-09-14',freq='1D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))
data_list_total = {}
data_list_today = {}
for i in date_list:
    data_list_total[i] = data.loc[i,['province_name','total_confirm']].sort_values(by='total_confirm').values.tolist()[::-1]
    data_list_today[i] = data.loc[i, ['province_name', 'today_confirm']].values.tolist()[::-1]

# data_list_today['2021-07-24'].append(['青海',0])#补充数据,未爬到的数据
# data_list_today['2021-07-24'].append(['新疆',1])
# data_list_today['2021-07-24'].append(['西藏',0])
# data_list_today['2021-08-08'].append(['青海',0])
# data_list_today['2022-03-21'].append(['青海',0])
# data_list_today['2022-05-05'].append(['海南',0])
#
# data_list_total['2021-07-24'].append(['青海',18])
# data_list_total['2021-07-24'].append(['新疆',0])
# data_list_total['2021-07-24'].append(['西藏',1])
# data_list_total['2021-08-08'].append(['青海',18])
# data_list_total['2022-03-21'].append(['青海',18])
# data_list_total['2022-05-05'].append(['海南',288])
###########################################################################################
data3 = pd.read_csv('world_all_country_history_data_2022_09_16.csv')

############################################################################################
data4 = data3[data3['country_name'] == '中国']
cn_data = data4.copy()
cn_data['date'] = pd.to_datetime(cn_data['date']) # 将日期这一列数据,设置为datatime64[ns]格式
cn_data.set_index('date',inplace=True) # 将日期设置为索引

date_list  = pd.DataFrame(pd.date_range('2022-07-01','2022-09-14',freq='1D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))
cn_data_list = [[date,cn_data.loc[date,'total_confirm']] for date in date_list]
cnh_data_list = [[date,cn_data.loc[date,'total_heal']] for date in date_list]
cnd_data_list = [[date,cn_data.loc[date,'total_dead']] for date in date_list]

#气泡数据准备
marker_data = []
marker_data_h = []
marker_data_d = []
for i,j  in enumerate(date_list):
    md_data =  [0] * len(cn_data_list)
    mdh_data = [0] * len(cnh_data_list)
    mdd_data = [0] * len(cnd_data_list)
    md_data[i] = int(dict(cn_data_list)[j])
    mdh_data[i] = int(dict(cnh_data_list)[j])
    mdd_data[i] = int(dict(cnd_data_list)[j])
    marker_data.append(md_data)
    marker_data_h.append(mdh_data)
    marker_data_d.append(mdd_data)


def draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word):
    t1 = Timeline(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='700px'))
    for z, date in enumerate(data):
        piecesC = [
            {"min": 10000, 'color': '#7f1100'},
            {"min": 1000, "max": 9999, 'color': '#bd1316'},
            {"min": 500, "max": 999, 'color': '#e64b45'},
            {"min": 100, "max": 499, 'color': '#ff8c71'},
            {"min": 1, "max": 99, 'color': '#fdd2a0'},
            {"max": 1}
        ]
    # 条形图
        bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add_xaxis([i[0] for i in data_bar_today[date][2:]])
            .add_yaxis('新增确诊', [i[1] for i in data_bar_today[date]][2:])
            .add_yaxis('累计确诊', [i[1] for i in data_bar_total[date]][2:])
            .set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊人数条形图',
                                                      pos_left='7%', pos_top='1.5%',
                                                      title_textstyle_opts=opts.TextStyleOpts(font_size=14),

                                                      ),
                            legend_opts=opts.LegendOpts(pos_top='4.6%', pos_left='6.5%', is_show=True,
                                                        textstyle_opts=opts.TextStyleOpts(color='white')),
                            datazoom_opts=opts.DataZoomOpts(is_show=True, range_start=0, range_end=20, pos_top='43%', ),
                            xaxis_opts=opts.AxisOpts(name='',
                                                     type_='category',  # 轴的类型
                                                     name_location='center',  # 坐标轴轴名称的位置
                                                     name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                     axislabel_opts=opts.LabelOpts(color='white', is_show=True),
                                                     # 坐标轴标签的颜色

                                                     axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                     is_inside=True,  # 刻度线是否朝内
                                                                                     # 坐标轴刻度线的样式
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan')),
                                                     axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
                                                                                     # 坐标轴的箭头的方向
                                                                                     # 坐标轴轴线的颜色
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan'))
                                                     ),
                            yaxis_opts=opts.AxisOpts(name='人数',  # x轴的名称
                                                     type_='value',  # 轴的类型
                                                     name_location='center',  # 坐标轴轴名称的位置
                                                     name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                     axislabel_opts=opts.LabelOpts(color='cyan', is_show=False),
                                                     # 坐标轴标签的颜色
                                                     axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                     is_inside=True,  # 刻度线是否朝内
                                                                                     # 坐标轴刻度线的样式
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan')),
                                                     axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
                                                                                     # 坐标轴的箭头的方向
                                                                                     # 坐标轴轴线的颜色
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan'))
                                                     ),
                            # ----- 视觉映射配置项目
                            visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                                              is_show=False,
                                                              range_text=['Highe', 'Low'],
                                                              textstyle_opts=opts.TextStyleOpts(color='cyan'),

                                                              # 设置分段颜色
                                                              max_=100000,  # 最大值
                                                              pos_right='1%',
                                                              pos_top='center',
                                                              pieces=piecesC,
                                                              ),


                            )
           )


    # 玫瑰图
        pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add('', data_pie[date],
                radius=['40', '100'],
                rosetype='area',
                center=['85.8%', '71%'],
                label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
                )
            .set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊玫瑰图',
                                                      pos_right='10%',
                                                      title_textstyle_opts=opts.TextStyleOpts(font_size=14),
                                                      pos_top='49%'),
                            legend_opts=opts.LegendOpts(is_show=False))

           )

    # 地图
        map_ = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
                 .add('today_confirm', data_map_today[date], type,
                      label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
                                                font_family='SimHei'), is_map_symbol_show=False)
                 .add('total_confirm', data_map_total[date], type,
                      label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
                                                font_family='SimHei'), is_map_symbol_show=False)

                 .set_global_opts(title_opts=opts.TitleOpts(map_name + '疫情地图', pos_left='center',
                                                            title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),
                                                            subtitle_textstyle_opts=opts.TextStyleOpts(font_size=18,
                                                                                                       color='white'),
                                                            pos_top='1%'),
                                  legend_opts=opts.LegendOpts(pos_top='7%',
                                                              textstyle_opts=opts.TextStyleOpts(color='white'),
                                                              is_show=True,selected_mode=''),
                                  visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=piecesC, pos_left='5%',
                                                                    pos_top='center',
                                                                    textstyle_opts=opts.TextStyleOpts(color='white')),
                                  )
                 )

        #词云
        couldword = (
            WordCloud(init_opts=opts.InitOpts(theme=ThemeType.CHALK,))
                .add('', data_pair=data_word[date], word_size_range=[20, 60],
                     textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold', ),
                     pos_left='70%', pos_right='1%', pos_top='1%', pos_bottom='63%', height='335px', width='500px',
                     shape='square')
                .set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
                                                           title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='12%',
                                                           pos_top='2.5%'))
        )

        line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
                .add_xaxis([i[0] for i in line1])
                .add_yaxis('总计确诊', [int(i[1]) for i in line1],
                       symbol='circle',
                       symbol_size=5,
                       label_opts=opts.LabelOpts(is_show=False),
                       is_smooth=True,
                       )
                .add_yaxis('总计确诊', market1[z],  # 气泡系列数据,
                       label_opts=opts.LabelOpts(is_show=False),
                       symbol_size=0,
                       linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                       markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                         data=[opts.MarkLineItem(type_='max')])
                       )
                .add_yaxis('累计治愈', [int(i[1]) for i in line2],
                           symbol='circle',
                           symbol_size=5,
                           label_opts=opts.LabelOpts(is_show=False),
                           is_smooth=True,
                           )
                .add_yaxis('累计治愈', market2[z],  # 气泡系列数据,
                           label_opts=opts.LabelOpts(is_show=False),
                           symbol_size=0,
                           linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                           markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                             data=[opts.MarkLineItem(type_='max')])
                           )
                .add_yaxis('累计死亡', [int(i[1]) for i in line3],
                           symbol='circle',
                           symbol_size=5,
                           label_opts=opts.LabelOpts(is_show=False),
                           is_smooth=True,
                           )
                .add_yaxis('累计死亡', market3[z],  # 气泡系列数据,
                           label_opts=opts.LabelOpts(is_show=False),
                           symbol_size=0,
                           linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                           markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                             data=[opts.MarkLineItem(type_='max')])
                           )
            .set_global_opts(
                                        title_opts=opts.TitleOpts(title=map_name+'时序折线图',
                                                          pos_left='8%',
                                                          title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='49%'),

                                     xaxis_opts=opts.AxisOpts(name='日期',
                                                              name_gap=20,
                                                              name_textstyle_opts=opts.TextStyleOpts(color='cyan',
                                                                                                     font_size=10),
                                                              axislabel_opts=opts.LabelOpts(color='cyan'),
                                                              axisline_opts=opts.AxisLineOpts(is_show=True,
                                                                                              symbol=['none', 'arrow'],


                                                                                              linestyle_opts=opts.LineStyleOpts(
                                                                                                  color='cyan')),
                                                              ),
                                     yaxis_opts=opts.AxisOpts(name='人数',
                                                              min_=0,
                                                              name_location='center',
                                                                name_gap=10,
                                                              name_textstyle_opts=opts.TextStyleOpts(color='cyan',
                                                                                                     ),
                                                              axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),
                                                              axisline_opts=opts.AxisLineOpts(is_show=True,
                                                                                              #  设置轴线的颜色
                                                                                              linestyle_opts=opts.LineStyleOpts(
                                                                                                  color='cyan'),symbol=['none', 'arrow']),



                                                              ),
                                     tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
                                     axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                                           label=opts.LabelOpts(color='black',
                                                                                                font_size=12,
                                                                                                font_family='SimHei')),
                                     legend_opts=opts.LegendOpts(is_show=True,pos_bottom='44%',pos_left='4.5%'),


                                     )
                    .set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
                                                                       width=2,
                                                                       ))
                    )

    # pos_left='67%', pos_right='8%', pos_bottom='55%', pos_top='8%'
        grid = (Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width='1536px',height='672px'))
                .add(bar,
                 grid_opts=opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='11.5%',pos_bottom='57%'),
                 is_control_axis_index=True,
                 )
                .add(line,
                 grid_opts=opts.GridOpts(pos_left ='2.6%', pos_right = '77.6%', pos_top ='57%', pos_bottom = '10.5%'),
                 )
                .add(pie,
                 grid_opts=opts.GridOpts()
                 )
                .add(map_,
                 grid_opts=opts.GridOpts(is_contain_label=True))
                .add(couldword,grid_opts=opts.GridOpts())
            )
        t1.add(grid, f'{date}')
        t1.add_schema(play_interval=350,
                  is_loop_play=False,
                  orient='horizontal',
                  pos_left='8%',
                  pos_bottom='0.8%',
                  pos_right='10%'


                  )
    t1.render(map_name+'.html')

############################################################################### 数据准备
################################################################################
data = date_list
map_name = '中国'
data_bar_today = data_list_today
data_bar_total = data_list_total
data_pie = data_list_total
data_map_today = data_list_today
data_map_total = data_list_total
type = 'china'
line1 = cn_data_list
market1 = marker_data
line2 = cnh_data_list
market2 = marker_data_h
line3 = cnd_data_list
market3 = marker_data_d
data_word = data_list_today
#
draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word)

################################################################################################################################################
# data = date_list
# map_name = '城市'
# data_bar_today = data_list_today
# data_bar_total = data_list_total
# data_pie = data_list_total
# data_map_today = data_list_today
# data_map_total = data_list_total
# type = 'china-cities'
# line1 = cn_data_list
# market1 = marker_data
# line2 = cnh_data_list
# market2 = marker_data_h
# line3 = cnd_data_list
# market3 = marker_data_d
# data_word = data_list_today
# #
# draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,data_word)

3,处理数据,这里是为了避免出现空白区域,如果没有这一步会出现很多空白区域的。

import requests
import re
import pandas as pd
import time

def save_data(data,name):
    file_name = name+'_'+time.strftime('%Y_%m_%d',time.localtime(time.time()))+'.csv'
    data.to_csv(file_name,index=None,encoding='utf_8_sig')
    print(file_name+'保存成功')

#地图准确数据
dt = requests.get('https://assets.pyecharts.org/assets/maps/china-cities.js')
dt.encoding = 'utf-8'
data_name = re.findall('name:"(.*?)",',dt.text)
data_id = re.findall('id:"(.*?)",',dt.text)
data = [list(i) for i in zip(data_id,data_name)]

#自己的数据
df = pd.read_csv('all_cities_data_2022_07_19.csv')
dataC = df[['id','name','today_confirm','total_confirm','provinces']].values.tolist()

#系统命名匹配
for i in range(len(dataC)):
    for j in range(len(data)):
        if dataC[i][0] == data[j][0]:
            dataC[i][1] = data[j][1]
        else:
            continue

#删掉自带的州和县和区
for i in range(len(dataC)):
    if (dataC[i][1][-1] =='州' or dataC[i][1][-1] =='县' or dataC[i][1][-1] == '区') and len(dataC[i][1])>2:
        dataC[i][1] = dataC[i][1].strip('州')
        dataC[i][1] = dataC[i][1].strip('县')
        dataC[i][1] = dataC[i][1].strip('区')
print(dataC)



# 重新构建csv文件
csv_data = pd.DataFrame({'name':[dataC[i][1] for i in range(len(dataC))],'provinces':[dataC[i][4] for i in range(len(dataC))],
                         'today_confirm':[dataC[i][2] for i in range(len(dataC))],'total_confirm':[dataC[i][3] for i in range(len(dataC))],})

print(csv_data)
save_data(csv_data,'city-province-data')

#除了地图市的数据

4,绘制3D地图(包含世界和中国的)

import pandas as pd # 导入数据分析模块
import numpy as np # 导入科学计算模块
from pyecharts.charts import Bar, Map, Line, Pie, Grid, Timeline, WordCloud, Map3D, \
    MapGlobe  # 导入条形图,地图,折线图,玫瑰图 ,grid并行组图组件
from pyecharts import options as opts # 导入配置项模块
from pyecharts.globals import ThemeType # 导入主题模块



def draw_mix(data,map_name,data_bar_today,data_bar_total,data_pie,data_word,data_map_today,data_map_total,type,line1,market1,line2,market2,line3,market3,):
    t1 = Timeline(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='672px'))
    for z, date in enumerate(data):
        pieces = [
            {"min": 10000000},
            {"min": 1000000, "max": 9999999},
            {"min": 100000, "max": 999999},
            {"min": 10000, "max": 99999},
            {"min": 1000, "max": 9999},
            {"min": 0, "max": 999},
        ]
    # 条形图
        bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add_xaxis([i[0] for i in data_bar_today[date][:30]])
            .add_yaxis('新增确诊', [i[1] for i in data_bar_today[date]][:30])
            .add_yaxis('累计确诊', [i[1] for i in data_bar_total[date]][:30])
            .set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊人数条形图',
                                                      pos_left='7%', pos_top='1.5%',
                                                      title_textstyle_opts=opts.TextStyleOpts(font_size=14),

                                                      ),
                            legend_opts=opts.LegendOpts(pos_top='4.6%', pos_left='6.5%', is_show=True,
                                                        textstyle_opts=opts.TextStyleOpts(color='white')),
                            datazoom_opts=opts.DataZoomOpts(is_show=True, range_start=0, range_end=20, pos_top='43%', ),
                            xaxis_opts=opts.AxisOpts(name='',
                                                     type_='category',  # 轴的类型
                                                     name_location='center',  # 坐标轴轴名称的位置
                                                     name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                     axislabel_opts=opts.LabelOpts(color='white', is_show=True),
                                                     # 坐标轴标签的颜色

                                                     axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                     is_inside=True,  # 刻度线是否朝内
                                                                                     # 坐标轴刻度线的样式
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan')),
                                                     axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
                                                                                     # 坐标轴的箭头的方向
                                                                                     # 坐标轴轴线的颜色
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan'))
                                                     ),
                            yaxis_opts=opts.AxisOpts(name='人数',  # x轴的名称
                                                     type_='value',  # 轴的类型
                                                     name_location='center',  # 坐标轴轴名称的位置
                                                     name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                     axislabel_opts=opts.LabelOpts(color='cyan', is_show=False),
                                                     # 坐标轴标签的颜色
                                                     axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                     is_inside=True,  # 刻度线是否朝内
                                                                                     # 坐标轴刻度线的样式
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan')),
                                                     axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],
                                                                                     # 坐标轴的箭头的方向
                                                                                     # 坐标轴轴线的颜色
                                                                                     linestyle_opts=opts.LineStyleOpts(
                                                                                         color='cyan'))
                                                     ),
                            # ----- 视觉映射配置项目
                            visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                                              is_show=False,
                                                              range_text=['Highe', 'Low'],
                                                              textstyle_opts=opts.TextStyleOpts(color='cyan'),

                                                              # 设置分段颜色
                                                              max_=1000000,  # 最大值
                                                              pos_right='1%',
                                                              pos_top='center',
                                                              pieces=pieces,
                                                              ),


                            )
           )


    # 玫瑰图
        pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
            .add('', data_pie[date][:13],
                 radius=['40', '83'],
                 rosetype='area',
                 center=['19.3%', '73%'],
                label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
                )
            .set_global_opts(title_opts=opts.TitleOpts(title=map_name + '累计确诊玫瑰图',
                                                       pos_left='14.5%',
                                                       title_textstyle_opts=opts.TextStyleOpts(font_size=14),
                                                       pos_top='53%'),
                            legend_opts=opts.LegendOpts(is_show=False))

           )
        # 地图


        name = pd.read_csv('translate.csv',encoding='utf-8')
        name_C ={i:j for i,j in zip([a for a in name['English']],[b for b in name['chinese']])}

        map_ = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='400px',height='400px'))
                 .add('today_confirm', data_map_today[date], type,
                      label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
                                                font_family='SimHei'), is_map_symbol_show=False,name_map=name_C,zoom=0.73,center=[17,8])
                 .add('total_confirm', data_map_total[date], type,
                      label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
                                                font_family='SimHei'), is_map_symbol_show=False,name_map=name_C)
                .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
                 .set_global_opts(title_opts=opts.TitleOpts(map_name + '疫情地图', pos_left='center',
                                                            title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),
                                                            subtitle_textstyle_opts=opts.TextStyleOpts(font_size=16,
                                                                                                       color='white'),
                                                            pos_top='2%'),
                                  legend_opts=opts.LegendOpts(pos_top='7%',
                                                              textstyle_opts=opts.TextStyleOpts(color='white'),
                                                              is_show=True,selected_mode='single'),
                                  visualmap_opts=opts.VisualMapOpts(max_=1000000,is_piecewise=True, pieces=pieces, pos_left='5%',
                                                                    pos_top='center',textstyle_opts=opts.TextStyleOpts(color='white')),
                                  )
                 )

        #词云shape='square',
        couldword = (
            WordCloud(init_opts=opts.InitOpts(theme=ThemeType.CHALK,))
                .add('', data_pair=data_word[date], word_size_range=[20, 45],
                     textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold', ),
                     pos_left='73%', pos_right='3%', pos_top='10%', pos_bottom='75%', height='240px', width='370px',)
                .set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
                                                           title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='13%',
                                                           pos_top='4%'))
        )

        line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
                .add_xaxis([i[0] for i in line1])
                .add_yaxis('总计确诊', [int(i[1]) for i in line1],
                       symbol='circle',
                       symbol_size=5,
                       label_opts=opts.LabelOpts(is_show=False),
                       is_smooth=True,
                       )
                .add_yaxis('总计确诊', market1[z],  # 气泡系列数据,
                       label_opts=opts.LabelOpts(is_show=False),
                       symbol_size=0,
                       linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                       markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                         data=[opts.MarkLineItem(type_='max')])
                       )
                .add_yaxis('累计治愈', [int(i[1]) for i in line2],
                           symbol='circle',
                           symbol_size=5,
                           label_opts=opts.LabelOpts(is_show=False),
                           is_smooth=True,
                           )
                .add_yaxis('累计治愈', market2[z],  # 气泡系列数据,
                           label_opts=opts.LabelOpts(is_show=False),
                           symbol_size=0,
                           linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                           markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                             data=[opts.MarkLineItem(type_='max')])
                           )
                .add_yaxis('累计死亡', [int(i[1]) for i in line3],
                           symbol='circle',
                           symbol_size=5,
                           label_opts=opts.LabelOpts(is_show=False),
                           is_smooth=True,
                           )
                .add_yaxis('累计死亡', market3[z],  # 气泡系列数据,
                           label_opts=opts.LabelOpts(is_show=False),
                           symbol_size=0,
                           linestyle_opts=opts.LineStyleOpts(is_show=False, width=0),
                           markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                             data=[opts.MarkLineItem(type_='max')])
                           )
            .set_global_opts(
                                        title_opts=opts.TitleOpts(title=map_name+'时序折线图',
                                                          pos_right='11%',
                                                          title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='49%'),

                                     xaxis_opts=opts.AxisOpts(name='日期',
                                                              name_gap=20,
                                                              name_textstyle_opts=opts.TextStyleOpts(color='cyan',
                                                                                                     font_size=10),
                                                              axislabel_opts=opts.LabelOpts(color='cyan'),
                                                              axisline_opts=opts.AxisLineOpts(is_show=True,
                                                                                              symbol=['none', 'arrow'],


                                                                                              linestyle_opts=opts.LineStyleOpts(
                                                                                                  color='cyan')),
                                                              ),
                                     yaxis_opts=opts.AxisOpts(name='人数',
                                                              min_=0,
                                                              name_location='center',
                                                                name_gap=10,
                                                              name_textstyle_opts=opts.TextStyleOpts(color='cyan',
                                                                                                     ),
                                                              axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),
                                                              axisline_opts=opts.AxisLineOpts(is_show=True,
                                                                                              #  设置轴线的颜色
                                                                                              linestyle_opts=opts.LineStyleOpts(
                                                                                                  color='cyan'),symbol=['none', 'arrow']),



                                                              ),
                                     tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
                                     axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                                           label=opts.LabelOpts(color='black',
                                                                                                font_size=12,
                                                                                                font_family='SimHei')),
                                     legend_opts=opts.LegendOpts(is_show=True,pos_bottom='44%',pos_right='6%'),


                                     )
                    .set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
                                                                       width=2,
                                                                       ))
                    )

    # pos_left='67%', pos_right='8%', pos_bottom='55%', pos_top='8%'
        grid = (Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK, width='1536px',height='672px'))
                .add(bar,
                 grid_opts=opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='11.5%',pos_bottom='57%'),
                 is_control_axis_index=True,
                 )
                .add(line,
                 grid_opts=opts.GridOpts(pos_left ='75.2%', pos_right = '4%', pos_top ='57%', pos_bottom = '10.5%'),
                 )
                .add(pie,
                 grid_opts=opts.GridOpts()
                 )
                .add(map_,
                 grid_opts=opts.GridOpts(is_contain_label=True))
                .add(couldword,grid_opts=opts.GridOpts())
            )
        t1.add(grid, f'{date}')
        t1.add_schema(play_interval=1000,
                  is_loop_play=False,
                  orient='horizontal',
                  pos_left='8%',
                  pos_bottom='0.8%',
                  pos_right='10%'

                  )
    t1.render(map_name+'.html')

data = pd.read_csv('world_all_country_history_data_2022_07_19.csv')
data_m = pd.read_csv('xiugai_2022_07_27.csv')
data['date'] = pd.to_datetime(data['date'])
data_m['date'] = pd.to_datetime((data_m['date']))
data_m.set_index('date',inplace=True)
data.set_index('date',inplace=True)
#对整体时间进行处理
date_list  = pd.DataFrame(pd.date_range('2021-01-1','2022-07-01',freq='7D'))
date_list = date_list[0].apply(lambda x:x.strftime('%Y-%m-%d'))


data_list_total = {}
data_list_today = {}
data_list_total_num = {}
data_list_dead_num = {}
data_list_heal_num = {}

for i in date_list:
    data_list_total[i] = data_m.loc[i, ['country_name', 'total_confirm']].sort_values(by='total_confirm').values.tolist()[::-1]
    data_list_today[i] = data_m.loc[i, ['country_name', 'today_confirm']].values.tolist()[::-1]
    data_list_total_num[i] = data.loc[i, ['total_confirm']].sum().values.tolist()
    data_list_dead_num[i] = data.loc[i, ['total_dead']].sum().values.tolist()
    data_list_heal_num[i] = data.loc[i, ['total_heal']].sum().values.tolist()


#数据准备
key1 = [ i for i in data_list_heal_num.keys()]
value1 = [ i[0] for i in data_list_heal_num.values()]
data_list_heal_num_ = [[key1[i],value1[i]] for i in range(len(key1))]

key2 = [ i for i in data_list_dead_num.keys()]
value2 = [ i[0] for i in data_list_dead_num.values()]
data_list_dead_num_ = [[key2[i],value2[i]] for i in range(len(key2))]

key3 = [ i for i in data_list_heal_num.keys()]
value3 = [ i[0] for i in data_list_heal_num.values()]
data_list_total_num_ = [[key3[i],value3[i]] for i in range(len(key3))]

#气泡数据准备
marker_data = []
marker_data_h = []
marker_data_d = []
for i,j  in enumerate(date_list):
    md_data =  [0] * len(data_list_total_num_)
    mdh_data = [0] * len(data_list_heal_num_)
    mdd_data = [0] * len(data_list_dead_num_)
    md_data[i] = int(dict(data_list_total_num_)[j])
    mdh_data[i] = int(dict(data_list_heal_num_)[j])
    mdd_data[i] = int(dict(data_list_dead_num_)[j])
    marker_data.append(md_data)
    marker_data_h.append(mdh_data)
    marker_data_d.append(mdd_data)


line1 = data_list_total_num_
market1 = marker_data
line2 = data_list_heal_num_
market2 = marker_data_h
line3 = data_list_dead_num_
market3 = marker_data_d




draw_mix(data=date_list,map_name='世界',data_bar_today=data_list_today,data_bar_total=data_list_total,data_pie=data_list_total,data_word=data_list_today,
         data_map_today=data_list_today,data_map_total=data_list_total,type='world',line1=data_list_total_num_,market1=marker_data,
         line2=data_list_heal_num_,market2=marker_data_h,line3=data_list_dead_num_,market3=marker_data_d)

5,绘制省份地图,全部省份

from time import strftime

from pyecharts.charts import Bar, Grid, Map, Line, Pie, MapGlobe, Timeline, WordCloud
from pyecharts.charts.composite_charts import timeline
from pyecharts.globals import ThemeType
from pyecharts import options as opts
import pandas as pd
import re





def draw_map_total(map_name,data_bar_today,data_bar_total,data_line_total,data_pie,data_map_total,data_map_today,type,data_word):
        pieces = [
        {"min": 10000000},
        {"min": 1000000, "max": 9999999},
        {"min": 100000, "max": 999999},
        {"min": 10000, "max": 99999},
        {"min": 1000, "max": 9999},
        {"min": 0, "max": 999},
    ]

        piecesC = [
            {"min": 10000, 'color': '#7f1100'},
            {"min": 1000, "max": 9999, 'color': '#bd1316'},
            {"min": 500, "max": 999, 'color': '#e64b45'},
            {"min": 100, "max": 499, 'color': '#ff8c71'},
            {"min": 1, "max": 99, 'color': '#fdd2a0'},
            {"max": 0}
        ]

        bar = (Bar(init_opts=opts.InitOpts(theme=ThemeType.DARK))
        .add_xaxis([i[0] for i in data_bar_today][2:])
        .add_yaxis('新增确诊',[i[1] for i in data_bar_today][2:])
        .add_yaxis('累计确诊',[i[1] for i in data_bar_total][2:])
       .set_global_opts(title_opts=opts.TitleOpts(title=map_name+'累计确诊人数条形图',
                                                  pos_left='6.2%',pos_top='2.2%',
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=14),



                                                  ),
                        legend_opts=opts.LegendOpts(pos_top='5.5%', pos_left='6%', is_show=True,
                                                    textstyle_opts=opts.TextStyleOpts(color='white')),
                        datazoom_opts=opts.DataZoomOpts(is_show=True,range_start=0,range_end=20,pos_top='45.9%',),
                        xaxis_opts=opts.AxisOpts(name='',
                                                 type_='category',  # 轴的类型
                                                 name_location='center',  # 坐标轴轴名称的位置
                                                 name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                 axislabel_opts=opts.LabelOpts(color='white',is_show=True),  # 坐标轴标签的颜色

                                                 axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                 is_inside=True,  # 刻度线是否朝内
                                                                                 # 坐标轴刻度线的样式
                                                                                 linestyle_opts=opts.LineStyleOpts(
                                                                                     color='cyan')),
                                                 axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],  # 坐标轴的箭头的方向
                                                                                 # 坐标轴轴线的颜色
                                                                                 linestyle_opts=opts.LineStyleOpts(
                                                                                     color='cyan'))
                                                 ),
                        yaxis_opts=opts.AxisOpts(name='人数',  # x轴的名称
                                                 type_='value',  # 轴的类型
                                                 name_location='center',  # 坐标轴轴名称的位置
                                                 name_gap=10,  # 坐标轴轴名称距离轴线的距离
                                                 axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),  # 坐标轴标签的颜色
                                                 axistick_opts=opts.AxisTickOpts(is_show=True,  # 是否显示坐标轴刻度线
                                                                                 is_inside=True,  # 刻度线是否朝内
                                                                                 # 坐标轴刻度线的样式
                                                                                 linestyle_opts=opts.LineStyleOpts(
                                                                                     color='cyan')),
                                                 axisline_opts=opts.AxisLineOpts(symbol=['none', 'arrow'],  # 坐标轴的箭头的方向
                                                                                 # 坐标轴轴线的颜色
                                                                                 linestyle_opts=opts.LineStyleOpts(
                                                                                     color='cyan'))
                                                 ),
                        # ----- 视觉映射配置项目
                        visualmap_opts=opts.VisualMapOpts(is_piecewise=True,
                                                          is_show=False,
                                                          range_text=['Highe', 'Low'],
                                                          textstyle_opts=opts.TextStyleOpts(color='cyan'),

                                                          # 设置分段颜色
                                                          max_=10000,  # 最大值
                                                          pos_right='1%',
                                                          pos_top='center',
                                                          pieces=piecesC,
                                                          ),

                        )
       )
        line = (Line(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
            .add_xaxis([i[0] for i in data_line_total])
            .add_yaxis('确诊累计', [i[1] for i in data_line_total],
                       symbol='circle',
                       symbol_size=5,
                       label_opts=opts.LabelOpts(is_show=False),
                       is_smooth=True,
                       markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                         data=[opts.MarkLineItem(type_='max')]))
            .add_yaxis('累计治愈', [i[2] for i in data_line_total],
                       symbol='circle',
                       symbol_size=5,
                       label_opts=opts.LabelOpts(is_show=False),
                       is_smooth=True,
                       markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                         data=[opts.MarkLineItem(type_='max')]))
            .add_yaxis('累计死亡', [i[3] for i in data_line_total],
                       symbol='circle',
                       symbol_size=5,
                       label_opts=opts.LabelOpts(is_show=False),
                       is_smooth=True,
                       markpoint_opts=opts.MarkPointOpts(symbol_size=[40, 40],
                                                         data=[opts.MarkLineItem(type_='max')]))
            .set_global_opts(
                                title_opts=opts.TitleOpts(title=map_name+'新增确诊人数时序折线图',
                                                  pos_left='5%',
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=14),pos_top='51%'),

                             xaxis_opts=opts.AxisOpts(name='日期',  # 坐标轴名称
                                                      name_gap=20,  # 坐标轴名称距离坐标轴的位置
                                                      name_textstyle_opts=opts.TextStyleOpts(color='cyan',  # 坐标轴名称字体颜色,
                                                                                             font_size=10),  # 字体大小
                                                      axislabel_opts=opts.LabelOpts(color='cyan'),  # 坐标轴标签的颜色
                                                      axisline_opts=opts.AxisLineOpts(is_show=True,  # 坐标轴轴线配置项目.
                                                                                      symbol=['none', 'arrow'],
                                                                                      # 设置右端箭头
                                                                                      #  设置轴线的颜色
                                                                                      linestyle_opts=opts.LineStyleOpts(
                                                                                          color='cyan')),
                                                      ),  # x轴配置项目结束
                             yaxis_opts=opts.AxisOpts(name='人数',  # 坐标轴名称
                                                      min_=0,
                                                      name_location='center',
                                                        name_gap=10,
                                                      name_textstyle_opts=opts.TextStyleOpts(color='cyan',  # 坐标轴名称字体颜色,
                                                                                             ),
                                                      axislabel_opts=opts.LabelOpts(color='cyan',is_show=False),  # 坐标轴标签的颜色
                                                      axisline_opts=opts.AxisLineOpts(is_show=True,  # 坐标轴轴线配置项目.
                                                                                      #  设置轴线的颜色
                                                                                      linestyle_opts=opts.LineStyleOpts(
                                                                                          color='cyan'),symbol=['none', 'arrow']),



                                                      ),
                             tooltip_opts=opts.TooltipOpts(trigger='axis', axis_pointer_type='cross'),
                             axispointer_opts=opts.AxisPointerOpts(is_show=True,
                                                                   label=opts.LabelOpts(color='black',
                                                                                        font_size=12,
                                                                                        font_family='SimHei')),
                             legend_opts=opts.LegendOpts(is_show=True,pos_bottom='42%',pos_left='4.2%'),


                             )
            .set_series_opts(linestyle_opts=opts.LineStyleOpts(color='pink',
                                                               width=2,
                                                               ))
            )

        name = pd.read_csv('translate.csv', encoding='utf-8')
        name_C = {i: j for i, j in zip([a for a in name['English']], [b for b in name['chinese']])}



        world_map = (
            Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1400px', height='600px'))
            .add('total_confirm', data_map_total, type, is_map_symbol_show=False,
                 name_map=name_C)
            .add('today_confirm', data_map_today, type, is_map_symbol_show=False,
                 name_map=name_C)
            .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(
            title_opts=opts.TitleOpts(title=map_name+'疫情地图', pos_left='center',
                                      subtitle_textstyle_opts=opts.TextStyleOpts(color='cyan',
                                                                                 font_family='KaiTi',
                                                                                 font_size=16)),
            visualmap_opts=opts.VisualMapOpts(max_=1000000, is_piecewise=True, pieces=pieces),
            legend_opts=opts.LegendOpts(pos_top='6%', textstyle_opts=opts.TextStyleOpts(color='black'), is_show=True,
                                        )
        )
    )

        pie = (Pie(init_opts=opts.InitOpts(theme=ThemeType.DARK))
       .add('',data_pie,
            radius=['40','100'],
            rosetype='area',
            center=['85.8%','79%'],
            label_opts=opts.LabelOpts(formatter="{b}:{c}人"),
            )
       .set_global_opts(title_opts=opts.TitleOpts(title=map_name+'累计确诊玫瑰图',
                                                  pos_right='8%',
                                                  title_textstyle_opts=opts.TextStyleOpts(font_size=14),
                                                 pos_top='57%'),
                        legend_opts=opts.LegendOpts(is_show=False))


       )


    #     piecesC = [
    #     {"min": 1000,'color':'#7f1100'},
    #     {"min": 100, "max": 999,'color':'#bd1316'},
    #     {"min": 50, "max": 99,'color':'#e64b45'},
    #     {"min": 10, "max": 49,'color':'#ff8c71'},
    #     {"min": 1, "max": 9,'color':'#fdd2a0'},
    #     { "max": 0,'color':'#B0E0E6'}
    # ]
    #对应字典


        china_map = (Map(init_opts=opts.InitOpts(theme=ThemeType.CHALK))
            .add('today_confirm', data_map_today, type,
                label_opts=opts.LabelOpts(color='#fcfcfc', font_weight='bold', font_size=12,
                                                font_family='SimHei'), is_map_symbol_show=False)
            .add('total_confirm',data_map_total,type,
                 label_opts=opts.LabelOpts(color='#fcfcfc',font_weight='bold',font_size=12, font_family='SimHei'),is_map_symbol_show=False)
            # .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
            .set_global_opts(title_opts=opts.TitleOpts(map_name+'疫情地图',pos_left='center',title_textstyle_opts=opts.TextStyleOpts(font_size=20, ),subtitle_textstyle_opts=opts.TextStyleOpts(font_size=16,color='white' ),pos_top='2%'),
                             legend_opts=opts.LegendOpts(pos_top='7%', textstyle_opts=opts.TextStyleOpts(color='white'), is_show=True,),
                             visualmap_opts=opts.VisualMapOpts(is_piecewise=True, pieces=piecesC, pos_left='5%', pos_top='center',range_text=['高', '低'],textstyle_opts=opts.TextStyleOpts(color='white')),
                             )
            )

        couldword = (
        WordCloud()
        .add('', data_pair=data_word, word_size_range=[20, 80],textstyle_opts=opts.TextStyleOpts(font_family='Microsoft YaHei', font_weight='bold',),pos_left='75%', pos_right='4%', pos_top='10%', pos_bottom='60%', height='300px', width='335px',shape='square')
        .set_global_opts(title_opts=opts.TitleOpts(title="疫情热点",
                                                           title_textstyle_opts=opts.TextStyleOpts(font_size=15),pos_right='12%',
                                                           pos_top='4%')))




        grid = Grid(init_opts=opts.InitOpts(theme=ThemeType.CHALK,width='1536px',height='700px'))
        grid.add(bar,opts.GridOpts(pos_left='2.6%',pos_right='77.6%',pos_top='10.5%',pos_bottom='54%'))
        grid.add(line,opts.GridOpts(pos_left ='2.6%', pos_right = '77.6%', pos_top ='58%', pos_bottom = '6%'))
        grid.add(pie,opts.GridOpts())
        grid.add(china_map,opts.GridOpts())
        grid.add(couldword,opts.GridOpts())
        grid.render(map_name+'.html')



######################################################################################################################
#全国各省
#获取处理完后的省的数据
dfP = pd.read_csv('city-province-data_2022_07_20.csv')
dfC = pd.read_csv('all_cities_data_2022_07_22.csv')
dfT = pd.read_csv('china_all_provinces_history_data_2022_07_19.csv')
province_list =set([ i for i in dfP['provinces']])
add_list = ['市','土家族苗族自治州','自治区','地区','区','林区','恩施公土家族苗族自治区','州','县'
        ,'朝鲜族自治州','新区','盟','县','傣族景颇族自治州','傈僳族自治州','藏族自治州','白族自治州','彝族自治州','哈尼族彝族自治州','壮族苗族自治州'
        ,'傣族自治州','藏族羌族自治州','哈萨克自治州','蒙古自治州','柯尔克孜自治州','回族自治州','苗族自治县','黎族自治县','布依族苗族自治州','苗族侗族自治州'
        ,'土家族苗族自治县','苗族土家族自治县','藏族自治州','蒙古族藏族自治州','','黎族苗族自治县','土家族自治县','兵团第八师','六师']

for province in province_list:
    data_pair1 = dfP[dfP['provinces']==province][['name', 'total_confirm']].values.tolist()
    data_pair2 = dfP[dfP['provinces']==province][['name', 'today_confirm']].values.tolist()
    data_pair3 = dfT[dfT['province_name'] == province][['date','total_confirm','total_heal','total_dead']].values.tolist()
    data_pair4 = dfC[dfC['provinces'] == province][['name', 'total_confirm']].values.tolist()
    data_pair5 = dfC[dfC['provinces'] == province][['name', 'today_confirm']].values.tolist()
    data_pair_word = [ tuple(i) for i in data_pair4]
    data_pairs1 =[[f"{i[0] + j}",i[1]] for i in data_pair1 for j in add_list]
    data_pairs2 = [[f"{i[0] + j}",i[1]] for i in data_pair2 for j in add_list]
    draw_map_total(province,data_pair5,data_pair4,data_pair3,data_pair4,data_pairs1,data_pairs2,province,data_pair_word)
# #中国带市的数据
#
partten = "省|特别行政区|林区|区|地区|市|蒙古自治州|哈萨克自治州|柯尔克孜自治州|\
蒙古族藏族自治州|彝族自治州|藏族自治州|藏族自治州|藏族羌族自治州|傈僳族自治州|\
朝鲜族自治州|土家族苗族自治州|苗族侗族自治州|布依族苗族自治州|哈尼族彝族自治州|\
傣族景颇族自治州|傣族自治州|黎族自治县|黎族苗族自治县|兵团第八师|自治州|州|六师"

df = pd.read_csv('all_cities_data_2022_07_19.csv')
df.loc[df[df['name'] == '琼中县']['name'].index,'name'] = '琼中'
df['name2'] = df['name'].apply(lambda x: x if len(x)<=2 else re.sub(partten,'',x))
data_pair = df[['name2','total_confirm']].values.tolist()
data_pair_ = df[['name2','today_confirm']].values.tolist()
data_pair_dict = dict(data_pair)
data_pair_dict_ = dict(data_pair_)
data_pair.extend([['双河',data_pair_dict['博尔塔拉']],
                  ['北屯',data_pair_dict['阿勒泰']],
                 ['铁门关',data_pair_dict['巴音郭楞']]
                 ])
data_pair_.extend([['双河',data_pair_dict['博尔塔拉']],
                  ['北屯',data_pair_dict['阿勒泰']],
                 ['铁门关',data_pair_dict['巴音郭楞']]
                 ])
df2 = pd.read_csv('china_all_provinces_data_now_2022_07_19.csv')
#准备折线图数据
data3 = pd.read_csv('world_all_country_history_data_2022_07_19.csv')
data_line_ = data3[data3['country_name'] == '中国'][['date','total_confirm','total_heal','total_dead']].values.tolist()[730:]




supply_prov = ['台湾','上海','天津','重庆','北京','澳门','香港']
supply_data = df2[df2['name'].apply(lambda x:x in supply_prov)][['name','total_confirm']].values.tolist()
supply_data_ = df2[df2['name'].apply(lambda x:x in supply_prov)][['name','today_confirm']].values.tolist()
data_pair.extend(supply_data)
data_pair_.extend(supply_data_)


data = pd.DataFrame({'城市':[data_pair[i][0] for i in range(len(data_pair))],'累计确诊':[data_pair[i][1] for i in range(len(data_pair))]})


data_pair = data[['城市','累计确诊']].sort_values(by='累计确诊',ascending=False).values.tolist()
print(data_pair)
data_word = [ tuple(i) for i in data_pair][2:]
print(data_word)

#
#
# draw_map_total(map_name='中国城市',data_bar_today=data_pair_[:30],data_bar_total=data_pair,
#                data_line_total=data_line_,data_pie=data_pair[:15],data_map_total=data_pair,data_map_today=data_pair_,
#                type='china-cities',data_word=data_word)

7,主体框架

from  flask import Flask,render_template

app = Flask(__name__)

@app.route('/')
def china():
    return render_template('中国.html')

@app.route('/world')
def world():
    return render_template('世界.html')


@app.route('/香港.html')
def xianggang():
    return render_template('香港.html')

@app.route('/黑龙江.html')
def q():
    return render_template('黑龙江.html')


@app.route('/陕西.html')
def w():
    return render_template('陕西.html')


@app.route('/广西.html')
def e():
    return render_template('广西.html')


@app.route('/云南.html')
def r():
    return render_template('云南.html')


@app.route('/北京.html')
def t():
    return render_template('北京.html')


@app.route('/吉林.html')
def y():
    return render_template('吉林.html')


@app.route('/河北.html')
def u():
    return render_template('河北.html')


@app.route('/海南.html')
def i():
    return render_template('海南.html')


@app.route('/福建.html')
def o():
    return render_template('福建.html')


@app.route('/湖北.html')
def p():
    return render_template('湖北.html')


@app.route('/天津.html')
def a():
    return render_template('天津.html')


@app.route('/澳门.html')
def s():
    return render_template('澳门.html')


@app.route('/山东.html')
def d():
    return render_template('山东.html')


@app.route('/四川.html')
def f():
    return render_template('四川.html')


@app.route('/重庆.html')
def g():
    return render_template('重庆.html')


@app.route('/山西.html')
def h():
    return render_template('山西.html')


@app.route('/广东.html')
def j():
    return render_template('广东.html')


@app.route('/上海.html')
def k():
    return render_template('上海.html')


@app.route('/贵州.html')
def l():
    return render_template('贵州.html')


@app.route('/江苏.html')
def z():
    return render_template('江苏.html')


@app.route('/新疆.html')
def x():
    return render_template('新疆.html')


@app.route('/浙江.html')
def c():
    return render_template('浙江.html')

@app.route('/西藏.html')
def v():
    return render_template('西藏.html')

@app.route('/辽宁.html')
def b():
    return render_template('辽宁.html')

@app.route('/台湾.html')
def n():
    return render_template('台湾.html')

@app.route('/青海.html')
def m():
    return render_template('青海.html')

@app.route('/内蒙古.html')
def qa():
    return render_template('内蒙古.html')

@app.route('/河南.html')
def ws():
    return render_template('河南.html')


@app.route('/甘肃.html')
def ed():
    return render_template('甘肃.html')

@app.route('/安徽.html')
def rf():
    return render_template('安徽.html')

@app.route('/江西.html')
def tg():
    return render_template('江西.html')

@app.route('/湖南.html')
def yh():
    return render_template('湖南.html')

@app.route('/宁夏.html')
def uj():
    return render_template('宁夏.html')
	
	
@app.route('/world_map_GLO.html')
def zs():
    return render_template('world_map_GLO.html')

@app.route('/china.html')
def zcc():
    return render_template('china.html')

@app.route('/中国.html')
def zcfc():
    return render_template('中国.html')


@app.route('/世界.html')
def zcyyc():
    return render_template('世界.html')


@app.route('/中国城市.html')
def zcyyc23():
    return render_template('中国城市.html')

if __name__ =='__main__':
    app.run()

以下是文件的一个结构图

所以绘制html的文件都在templates里面,因为运行后就可以直接调用。

 前面的整体大概就这样,然后想实现跳转和上面的导航是在HBuilder实现的。这里就大概给个截图

这个是关于导航部分。

关于跳转部分主要是在这里 

整体大概的一个实现就是这样了。

至于打包部署到服务器上,如果有需要的话后面我再截图演示。

  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值