pyecharts代码

戏子无情 提交于 2020-01-28 18:17:46

作为一个湖北人,深切地感受到了疫情发展的迅速,每天新增的病例和新感染的地区都在增加。加油,武汉,加油中国!

图片结果在另一篇博客: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")  
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!