作为一个湖北人,深切地感受到了疫情发展的迅速,每天新增的病例和新感染的地区都在增加。加油,武汉,加油中国!
图片结果在另一篇博客:https://blog.csdn.net/qq_41081716/article/details/104087919
参考的博文:
python最全画地图,可视化数据,pyecharts画图
全国各主要省市经纬度
基于python Geolines制作北京到全国各地的航线
pyecharts带你领略动态轨迹图的风骚
世界范围内有病例输入的国家
截止至1月25日,出现新型肺炎病例的国家有中国、韩国、美国、法国、泰国、越南、新加坡、马来西亚、日本、澳大利亚、尼泊尔。
from pyecharts import Map
# 世界地图数据
value = [1330, 2, 2, 3, 5,2,1,3,3,1,1]
attr= ["China", "Korea", "United States", "France", "Thailand", "Vietnam","Singapore","Malaysia", "Japan", "Australia","Nepal"]
map0 = Map("新型肺炎感染病例国家",'各国疫情情况汇总(累计1353)',width=1200,height=600)
map0.add("世界地图", attr, value, maptype="world" , is_visualmap=True, visual_text_color='#000')
map0.render(path="./result/世界地图.html")
备注:is_visualmap:给对应国家区域添加颜色,不添加这一项只标出点,但区域没有涂色
中国范围内有病例输入的地区
绝大部分地区都有传染病例,只有青海和西藏暂时没有。
from pyecharts import Map
# 省和直辖市
province_distribution = {'湖北': 729, '北京': 36, '广东': 78, '上海': 33, '浙江': 62, '云南': 5, '四川': 28,
'山东': 27, '广西': 23, '贵州': 4, '安徽': 39, '海南': 17, '宁夏': 3, '吉林': 4, '江西': 18,
'天津': 8, '河南': 32, '重庆': 57, '山西': 6, '黑龙江': 9, '湖南': 43, '辽宁': 15, '澳门': 2,
'台湾': 3, '福建': 10, '香港': 5, '河北': 8, '内蒙古': 2, '江苏': 18, '陕西': 5, '新疆': 3,'甘肃': 4}
province=list(province_distribution.keys())
values=list(province_distribution.values())
# maptype='china' 只显示全国直辖市和省级
# 数据只能是省名和直辖市的名称
map = Map("中国地图",'中国疫情地区', width=1200, height=600)
map.add("中国", province, values, visual_range=[min(values), max(values)], maptype='china', is_visualmap=True,
visual_text_color='#000')
#map.show_config()
map.render(path="./result/中国地图.html")
备注:加map.show_config()语句在jupyter notebook显示不出来图片,所以用html格式保存。
中国各地区新型肺炎感染病例数排行
from pyecharts import Bar
bar =Bar("各地区新型肺炎确诊病例数")
province_distribution = {'湖北': 729, '北京': 36, '广东': 78, '上海': 33, '浙江': 62, '云南': 5, '四川': 28,
'山东': 27, '广西': 23, '贵州': 4, '安徽': 39, '海南': 17, '宁夏': 3, '吉林': 4, '江西': 18,
'天津': 8, '河南': 32, '重庆': 57, '山西': 6, '黑龙江': 9, '湖南': 43, '辽宁': 15, '澳门': 2,
'台湾': 3, '福建': 10, '香港': 5, '河北': 8, '内蒙古': 2, '江苏': 18, '陕西': 5, '新疆': 3,'甘肃': 4}
province=list(province_distribution.keys())
values=list(province_distribution.values())
#必须转化成np格式进行排序
area_list = np.array(province)
num_list=np.array(values)
#排序的依据是数值部分:num_list
#定y轴先变x轴
area_list = area_list[np.argsort(-num_list)]
num_list = num_list[np.argsort(-num_list)]
bar.add("确诊病例", area_list, num_list,is_label_show=True,is_datazoom_show=True)
bar.render(path="./result/中国各地区确诊病例数柱状图(排序).html")
备注:area_list = area_list[np.argsort(-num_list)]里添加了负号,表示从大到小排列,如果从小到大排列,则不需要加负号;
is_datazoom_show:可以让更多的横坐标显示出来,更加美观。
湖北省各地区肺炎感染情况
from pyecharts import Map
# 城市 -- 指定省的城市 xx市
city = ['武汉市', '十堰市', '宜昌市','鄂州市','荆门市','孝感市','荆州市','黄冈市', '随州市', '恩施州',
'仙桃市', '天门市']
values2 = [572, 5, 1, 1, 21, 26, 10,64, 5, 11,10,3]
# 湖北地图 数据必须是省内放入城市名
map2 = Map("湖北地图",'湖北各市疫情情况(累计729)', width=1200, height=600)
map2.add('湖北省', city, values2, visual_range=[min(values2), max(values2)], maptype='湖北', is_label_show=True,is_visualmap=True, visual_text_color='#000')
map2.render(path="./result/湖北地图.html")
湖北省各地区感染人数柱状图
from pyecharts import Bar
bar =Bar("湖北省新型肺炎感染病例数")
#必须转化成np格式进行
city_list = np.array(city)
num_list=np.array(values2 )
city_list = city_list[np.argsort(-num_list)]
num_list = num_list[np.argsort(-num_list)]
bar.add("确诊病例", city_list, num_list,is_label_show=True,is_datazoom_show=True)
bar.show_config()
bar.render(path="./result/湖北省各市感染人数柱状图(排序).html")
湖北各市确诊病例数占比(武汉除外)
from pyecharts import Pie
del city[0]
del values2[0]
pie =Pie("")
pie.add("", city, values2, is_label_show=True)
pie.render(path="./result/各市确诊病例数占比(武汉除外).html")
湖北各市确诊病例数漏斗图(武汉除外)
from pyecharts import Funnel # 从pyecharts包中导出创建漏斗图的函数
attr = city
values = values2
funnel1 = Funnel('各市确诊病例漏斗图', title_pos='center')
funnel1.add(name='环节', # 指定图例名称
attr=attr, # 指定属性名称
value=values, # 指定属性所对应的值
is_label_show=True, # 确认显示标签
label_formatter='{d}', # 指定标签显示的方式
legend_top='bottom', # 指定图例位置,为避免遮盖选择右下展示
# pyecharts包的文档中指出,当label_formatter='{d}'时,标签以百分比的形式显示.
# 但我这样做的时候,发现显示的百分比与原始数据对应不上,只好用上面那种显示形式
label_pos='outside', # 指定标签的位置,inside,outside
legend_orient='vertical', # 指定图例显示的方向
legend_pos='right') # 指定图例的位置
funnel1.render(path="./result/各市确诊病例数漏斗图(武汉除外).html")
湖北省一周确诊病例数折线图
from pyecharts import Line
attr = ['1月20日','1月21日', '1月22日', '1月23日', '1月24日', '1月25日']
value = [136, 319, 473, 571, 830, 1287]
line = Line('湖北省')
line.add("确诊病例", attr ,value, is_label_show=True)
line.render(path="./result/湖北省一周确诊病例数折线图.html")
新型肺炎输出轨迹图
dict_city={
"武汉市": [114.3162,30.581084],
"北京市": [116.395645,39.929986],
"天津市": [117.210813,39.14393],
"上海市": [121.487899,31.249162],
"重庆市": [106.530635,29.544606],
"香港特别行政区": [114.186124,22.293586],
"澳门特别行政区": [113.557519,22.204118],
"台湾省": [120.961454,23.80406],
"南宁市": [108.297234,22.806493 ],
"呼和浩特市": [111.660351, 40.828319],
"成都市": [104.067923,30.679943],
"西安市": [108.953098,34.2778],
"郑州市": [113.649644,34.75661],
"温州市": [120.690635,28.002838],
"海口市": [110.330802,20.022071],
"太原市": [112.550864,37.890277],
"广州市": [113.30765,23.120049],
"昆明市": [102.714601,25.049153],
"贵阳市": [106.709177,26.629907],
"大连市": [121.593478,38.94871],
"石家庄市": [114.522082,38.048958],
"玉树藏族自治州": [97.013316,33.00624],
"长沙市": [112.979353,28.213478],
"南京市": [118.778074,32.057236],
"济南市": [117.024967,36.682785],
"合肥市": [117.282699,31.866942],
"哈尔滨市": [126.657717,45.773225],
"福州市": [119.330221,26.047125],
"兰州市": [103.823305,36.064226],
"鄂州市": [114.895594,30.384439],
"荆门市": [112.21733,31.042611],
"恩施土家族苗族自治州": [109.517433,30.308978],
"随州市": [113.379358,31.717858],
"湖北省直辖行政单位": [110.487231,31.595768],
"孝感市": [113.935734,30.927955],
"襄樊市": [112.176326,32.094934],
"黄冈市": [114.906618,30.446109],
"荆州市": [112.241866,30.332591],
"十堰市": [110.801229,32.636994],
"宜昌市": [111.310981,30.732758],
"黄石市": [115.050683,30.216127],
"咸宁市": [114.300061,29.880657],
"南昌市": [115.893528,28.689578]
}
import pandas as pd
from pyecharts import GeoLines, Style
city_list=dict_city.keys()
lad_list=[a[0] for a in dict_city.values()]
long_list=[a[1] for a in dict_city.values()]
data= {'地点':list(city_list), '经度': lad_list, '纬度': long_list}
result= pd.DataFrame(data)
# #以武汉为始点,其他各个城市为终点,整理数据
plotting = result[result['地点'] != '武汉']['地点'].apply(lambda x : ('武汉',x))
#自定义各城市的经纬度
geo_cities_coords = {result.iloc[i]['地点']:[result.iloc[i]['经度'],result.iloc[i]['纬度']] for i in range(len(result))}
#设置画布的格式
style = Style(title_pos="center",
width=1000,
height=800)
#部分地理轨迹图的格式
style_geolines = style.add(is_label_show=True,
line_curve=0.3, #轨迹线的弯曲度,0-1
line_opacity=0.6, #轨迹线的透明度,0-1
geo_effect_symbol='plane', #特效的图形,有circle,plane,pin等等
geo_effect_symbolsize=10, #特效图形的大小
geo_effect_color='#7FFFD4', #特效的颜色
geo_effect_traillength=0.1, #特效图形的拖尾效果,0-1
label_color=['#FFA500', '#FFF68F'],#轨迹线的颜色,标签点的颜色,
border_color='#97FFFF', #边界的颜色
geo_normal_color='#36648B', #地图的颜色
label_formatter='{b}', #标签格式
legend_pos = 'left')
#作图
geolines = GeoLines('新型肺炎输出轨迹图', **style.init_style)
geolines.add('从武汉出发',
plotting,
maptype='china', #地图的类型,可以是省的地方,也可以是地市
geo_cities_coords=geo_cities_coords,
**style_geolines)
#发布,得到图形的html文件
geolines.render(path="./result/武汉迁徙图.html")
另一种风格:
# geo风格配置
style_geolines = style.add(
legend_orient="vertical",
legend_pos="left",
legend_top = "center",
legend_text_color="#fff",
is_label_show=True,
line_curve=0.2,
line_opacity=0.6,
geo_effect_symbol="plane",
geo_effect_symbolsize=8,
label_pos="right",
label_formatter="{b}",
label_text_color="#eee",
symbol_size = 0.2,
label_text_size=8,
label_color=['#24936E','#6A4C9C','#0089A7','#BEC23F','#D0104C']
)
#作图
geolines = GeoLines('新型肺炎输出轨迹图', **style.init_style)
geolines.add('从武汉出发',
plotting,
maptype='china', #地图的类型,可以是省的地方,如'广东',也可以是地市,如'东莞'等等
geo_cities_coords=geo_cities_coords,
**style_geolines)
#发布,得到图形的html文件
geolines.render(path="./result/武汉迁徙图1.html")
来源:CSDN
作者:古杜且偲
链接:https://blog.csdn.net/qq_41081716/article/details/104100474