学习目的:
1. 接上篇文章解释其中一组代码
2. 使用pyecharts做饼图
1 接上篇文章解释其中一组代码
import json
import datetime
from pyecharts.charts import Map
from pyecharts import options as opts
# 读原始数据文件
today = datetime.date.today().strftime('%Y%m%d') #20200416
datafile = 'data/'+ today + '.json'
with open(datafile, 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())
# 分析实时数据:'confirmedCount'字段
china_data = []
for province in json_array:
china_data.append((province['provinceShortName'], province['confirmedCount']))
china_data = sorted(china_data, key=lambda x: x[1], reverse=True) #reverse=True,表示降序,反之升序
print(china_data)
# 自定义的每一段的范围,以及每一段的特别的样式。
pieces = [
{'min': 10000, 'color': '#540d0d'},
{'max': 9999, 'min': 1000, 'color': '#9c1414'},
{'max': 999, 'min': 500, 'color': '#d92727'},
{'max': 499, 'min': 100, 'color': '#ed3232'},
{'max': 99, 'min': 10, 'color': '#f27777'},
{'max': 9, 'min': 1, 'color': '#f7adad'},
{'max': 0, 'color': '#f7e4e4'},
]
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]
m = Map()#导入做地图的Map模块
#指直接下来作图的数据,list(z)是指数据项,后接(坐标点名称和坐标点值)
m.add("累计确诊", [list(z) for z in zip(labels, counts)], 'china')
#系列配置项,LabelOpts是标签配置项,font_size是字体大小,is_show为是否显示标签
m.set_series_opts(label_opts=opts.LabelOpts(font_size=12),
is_show=False)
#全局配置项,TitleOpts是标题配置项,subtitle是副标题。
m.set_global_opts(title_opts=opts.TitleOpts(title='数据',
subtitle='数据来源:丁香园'),
#LegendOpts是指图例配置项
legend_opts=opts.LegendOpts(is_show=False),
#VisualMapOpts是指视觉映射配置项
visualmap_opts=opts.VisualMapOpts(pieces=pieces,
is_piecewise=True, #是否为分段型
is_show=True)) #是否显示视觉映射配置
#render()会生成本地 HTML 文件,默认会在当前目录生成 render.html 文件,也可以传入路径参数,如 m.render("mycharts.html")
m.render(path='C:/Users/Admin/demo/yiqingditu/data/数据.html')
以上是对代码的补充说明!
2.然后就是做第二个任务啦,分为三步。
第一:上代码,代码解释直接在代码中
第二:参考链接附上。
第一
import json
import datetime
from pyecharts.charts import Pie
import pyecharts.options as opts
# 读原始数据文件
today = datetime.date.today().strftime('%Y%m%d') #20200315
datafile = 'data/'+ today + '.json'
with open(datafile, 'r', encoding='UTF-8') as file:
json_array = json.loads(file.read())
# 分析数据:'confirmedCount'字段
china_data = []
for province in json_array:
china_data.append((province['provinceShortName'], province['confirmedCount']))
china_data = sorted(china_data, key=lambda x: x[1], reverse=True) #reverse=True,表示降序,反之升序
print(china_data)
#
labels = [data[0] for data in china_data]
counts = [data[1] for data in china_data]
data_china = [list(z) for z in zip(labels, counts)]
##以上跟上面完全一致,大概意思就是导入数据,然后取出自己需要的数据以当前时间命名。接下来就是应用pyecharts中的Pie饼图模块进行制作啦~最后通过渲染文件输入到所需保存的位置
# 可以赋予对象,也可不必,因为渲染是通过 .render() 语句完成的
p = (
Pie() # 就是pyecharts中的Pie饼图模块
.add( #加入所需的配置项
series_name="地名", # 系列名称
data_pair=data_china,# 馈入数据
radius="35%", # 饼图半径比例
center=["50%", "50%"], # 饼图中心坐标
label_opts=opts.LabelOpts(is_show=False, position="center"), # 标签位置
)
.set_global_opts(legend_opts=opts.LegendOpts(is_show=False)) # 不显示图例
.set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c}")) # 标签颜色
.render(path='C:/Users/Admin/demo/yiqingditu/data/饼图.html') # 渲染文件及其名称
)
然后就是参考链接了~
这是pyecharts的官网,里面有详细的配置说明和不同的模:https://echarts.apache.org/examples/zh/index.html#chart-type-pie
还有就是要感谢百度的paddle,真是相见恨晚,跟着学习必有收获。
数据来源丁香网:https://ncov.dxy.cn/ncovh5/view/pneumonia