pyecharts经过几次升级后,官网越来越难读懂(规范)了,每次去pyecharts官网找参数,都要了我这个小菜鸡半条命,各个参数含义清晰易懂,就是不知道要放在哪部分里面使用。。。在经过无数次的磨练之后,终于总结出来画图的规律,于是便有了这篇文章。
现在让我们在来拨茧抽丝,接开pyecharts画图的奥秘。
首先放上pyecharts官网:https://pyecharts.org/#/zh-cn/intro
如果画好一个理想中图表,需要以下四个部分的参数进行整合:
图表函数+数据+全局配置(标题、图纸大小、横纵坐标、工具栏等)+系列配置(图表线条、填充颜色、标签等)
但是如果你要画一个简单的图表,仅用图表函数+数据两部分即可搞定:
例如简单的柱形图:
from pyecharts.charts import Bar
Bar()#先写柱状图的基础函数
.add_xaxis(xaxis_data = ["A","B","C"])#add横轴的数据
.add_yaxis(series_name="趋势",yaxis_data = [1,2,3])#add纵轴的数据
.render_notebook()#显示图表
from pyecharts.charts import Liquid
c = Liquid().add(series_name='水球图',data = [0.6])
c.render_notebook()
只要你在官网中找到可配置的图形函数,在图形函数后加上add(数据),即可画出相应的图形。
看到这里你可能会有一个疑问,如何知道各个参数后面是接字典,还是列表,还是字符串?为什么有的图形函数后接的是add,有的是add_xaxis和add_yaxis?如何更换图表颜色,设置图表大小,添加图表标题?下面就来解答一下这些问题。
先来解答一下第一个问题,如何确定各个参数所对应数据的类型?回答照官网的指示来设置。
虽然pyecharts官网的参数所代表的含义及类型都写的很明确,但是经常会有参数类型不知如何确认,参数不知如何放置的情况。故先说一下参数的类型如何确认。
在官网中,每个参数后面都会标注出所对应的数据类型,下面就来解释一下这些数据类型都是什么含义:
之前说过pyecharts主要分为4块:图表函数、add数据、全局配置、系列配置。
在这四块构成中,首先要确定的就是图表函数,图表函数很简单,你需要画什么图形,就在官网链接上找到相应的图表函数,from pyecharts.charts import 相应的图表函数,即可使用。
官网基本图表类型链接:https://pyecharts.org/#/zh-cn/basic_charts
#以下分别调用柱状图、折线图、饼图、地图
from pyecharts.charts import Bar, Line, Pie, Map
ps:注意一下官网上函数的所属关系
看日历图这个函数Calendar包含在pyecharts.charts中的,所以调用时应from pyecharts.charts import Calendar
确认好我们要画的图形函数后,下一步就是在图形中添加相应的数据,而这个数据就是借用add函数来添加。
首先我们还是来看一下这个函数的所属关系:
1、柱状图
常识来看柱状图是需要有x轴和y轴两种数据的。从下图官网截图可以看出函数Bar后所附的为add_yaxis函数,既然有y轴的,也就意味着有对应的x轴add_xaxis。
官网上并未标注出add_xaxis这各部分,但是当你看到一个函数后出现了add_yaxis,也就意味着一定要写add_xaxis这部分。
Bar()#先写柱状图的基础函数
.add_xaxis(xaxis_data = ["A","B","C"])#add横轴的数据
.add_yaxis(series_name="趋势",yaxis_data = [1,2,3])#add纵轴的数据
2、水球图
有一种图,不是直角坐标系图,不需要同时存在x、y轴两种数据,只有单独数据就可以了,如下面的水球图。
在水球图Liquid函数后面接的是add,则使用的时候Liquid().add() 即可。
在我们可以用函数+add函数来画出一个简单的图形,但是默认配置项很多时候并不能满足我们的需求,这个时候就需要配置参数的帮助,首先我们来说一下全局配置参数。
这个全局配置参数是指官网里面的配置项-全局配置项的参数。
老规矩,先上链接https://pyecharts.org/#/zh-cn/global_options
按照官网的指示,全局配置函数的调用如下
from pyecharts.charts import Liquid
from pyecharts import options as opts
Liquid().add(series_name='水球图',data = [0.6]).set_global_opts(此处应有相应参数)
#设置全局配置项时,在图形函数后调用.set_global_options()即可
下面来说一下set_global_opts()中都可以设置哪些参数:
#以下是来自函数的官方定义
def set_global_opts(
self,
title_opts: types.Title = opts.TitleOpts(),
legend_opts: types.Legend = opts.LegendOpts(),
tooltip_opts: types.Tooltip = None,
toolbox_opts: types.Toolbox = None,
brush_opts: types.Brush = None,
xaxis_opts: types.Axis = None,
yaxis_opts: types.Axis = None,
visualmap_opts: types.VisualMap = None,
datazoom_opts: types.DataZoom = None,
graphic_opts: types.Graphic = None,
axispointer_opts: types.AxisPointer = None,
):
建议函数定义+官网参数详解联合使用,效果翻倍。
比如说我想对工具栏进行相应的设置,首先找到工具栏设置参数:ToolboxOpts,具体代码如下。
设置工具栏的同时对标题部分(TitleOpts)也进行命名:
from pyecharts.charts import Bar
from pyecharts import options as opts
Bar()
.add_xaxis(xaxis_data = ["A","B","C"])#x轴数据
.add_yaxis(series_name="趋势",yaxis_data = [1,2,3])#y轴数据
.set_global_opts(toolbox_opts = opts.ToolboxOpts(orient = 'vertical'),#工具栏设置
title_opts = opts.TitleOpts(title = "我是标题啊")
需要注意的点:
在官网的全局配置项中,你会发现有一个InitOpts:初始化配置项,这个初始化配置项又不存在于函数set_global_opts中,那这个初始配置项该如何配置呢?这个初始化配置项是在图表函数中进行设置的,还是拿柱状图举例:
若设置柱状图的长和宽:
from pyecharts.charts import Bar
from pyecharts import options as opts
Bar(init_opts=opts.InitOpts(width='720px',height='320px'))#在图表函数中设置初始化配置项
.add_xaxis(xaxis_data = ["A","B","C"])#x轴数据
.add_yaxis(series_name="趋势",yaxis_data = [1,2,3])#y轴数据
.render_notebook()#展示图表
这个系列配置参数主要包含一些图表内部比较细致的配置,线条颜色、文字样式等等。
系列配置项函数:set_series_opts
首先还是系列配置部分官网链接:https://pyecharts.org/#/zh-cn/series_options
接下来是set_series_opts函数的参数构成:
def set_series_opts(
self,
label_opts: types.Label = None,
linestyle_opts: types.LineStyle = None,
splitline_opts: types.SplitLine = None,
areastyle_opts: types.AreaStyle = None,
axisline_opts: types.AxisLine = None,
markpoint_opts: types.MarkPoint = None,
markline_opts: types.MarkLine = None,
markarea_opts: types.MarkArea = None,
effect_opts: types.Effect = opts.EffectOpts(),
tooltip_opts: types.Tooltip = None,
itemstyle_opts: types.ItemStyle = None,
**kwargs,
):
使用方法同全局设置一样,先找到要设置的参数对应的函数,再一次按照参数类型进行配置即可。
如:我想将之前画的柱状图的颜色改成橘色,首先找到颜色对应的是参数:itemstyle_opts中的color,那代码如下:
Bar(init_opts=opts.InitOpts(width='720px',height='320px'))
.add_xaxis(xaxis_data = ["A","B","C"])
.add_yaxis(series_name="趋势",yaxis_data = [1,2,3])
.set_series_opts(itemstyle_opts = opts.ItemStyleOpts(color="orange")).render_notebook()#在系列配置项中将柱状图颜色定义为橘色
pyecharts画图核心部分就是以上四个部分,只要按部就班,找到需要设置的函数所处位置,确定要设置的参数类型,按照顺序一点点堆叠起来,画图就不会有问题了。
就以2020年的新冠疫情图为例,如果我想做一个有时间趋势的疫情图该如何设置呢?
首先要确定图表函数:中国地图。
其次如何加入时间轴:介入组合图表时间线轮播多图Timeline。
#输入2020-01-28,2020-02-02两天的新冠确诊人数数据
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Map,Timeline
data = pd.DataFrame([['2020-01-28', '湖北', 272.0],['2020-01-28', '浙江', 299.0],['2020-01-28', '广东', 229.0],['2020-01-28', '河南', 27.0],['2020-01-28', '湖南', 222.0],['2020-01-28', '江西', 72.0],['2020-01-28', '安徽', 157.0],['2020-01-28', '重庆', 147.0], ['2020-01-28', '山东', 121.0], ['2020-01-28', '四川', 18.0], ['2020-01-28', '江苏', 1.0], ['2020-01-28', '上海', 8.0], ['2020-01-28', '北京', 91.0], ['2020-01-28', '福建', 82.0], ['2020-01-28', '广西', 58.0], ['2020-01-28', '陕西', 46.0], ['2020-01-28', '河北', 48.0], ['2020-01-28', '云南', 51.0], ['2020-01-28', '黑龙江', 37.0], ['2020-01-28', '海南', 43.0], ['2020-01-28', '辽宁', 36.0], ['2020-01-28', '山西', 2.0], ['2020-01-28', '天津', 24.0], ['2020-01-28', '甘肃', 24.0], ['2020-01-28', '宁夏', 12.0], ['2020-01-28', '内蒙古', 15.0], ['2020-01-28', '新疆', 13.0], ['2020-01-28', '贵州', 9.0], ['2020-01-28', '吉林', 9.0], ['2020-01-28', '香港', 8.0], ['2020-01-28', '台湾', 8.0], ['2020-01-28', '青海', 6.0], ['2020-01-28', '澳门', 7.0], ['2020-01-28', '西藏', np.nan], ['2020-02-02', '湖北', 11177.0], ['2020-02-02', '浙江', 724.0], ['2020-02-02', '广东', 683.0], ['2020-02-02', '河南', 566.0], ['2020-02-02', '湖南', 521.0], ['2020-02-02', '江西', 391.0], ['2020-02-02', '安徽', 48.0], ['2020-02-02', '重庆', 3.0], ['2020-02-02', '山东', 246.0], ['2020-02-02', '四川', 254.0], ['2020-02-02', '江苏', 271.0], ['2020-02-02', '上海', 193.0], ['2020-02-02', '北京', 191.0], ['2020-02-02', '福建', 159.0], ['2020-02-02', '广西', 127.0], ['2020-02-02', '陕西', 128.0], ['2020-02-02', '河北', 113.0], ['2020-02-02', '云南', 15.0], ['2020-02-02', '黑龙江', 118.0], ['2020-02-02', '海南', 71.0], ['2020-02-02', '辽宁', 7.0], ['2020-02-02', '山西', 6.0], ['2020-02-02', '天津', 54.0], ['2020-02-02', '甘肃', 51.0], ['2020-02-02', '宁夏', 288.0], ['2020-02-02', '内蒙古', 27.0], ['2020-02-02', '新疆', 24.0], ['2020-02-02', '贵州', 46.0], ['2020-02-02', '吉林', 31.0], ['2020-02-02', '香港', 15.0], ['2020-02-02', '台湾', 1.0], ['2020-02-02', '青海', 13.0], ['2020-02-02', '澳门', 8.0], ['2020-02-02', '西藏', 1.0]],columns=["日期","地区","确诊病例"])
#定义一个timeline和map的组合图
def timeline_map(data):
tl = Timeline().add_schema(play_interval =300,height=40,is_rewind_play=True,is_loop_play = True,is_auto_play=True)#设置播放速度、是否循环播放等参数
for day in sorted(list(set(data["日期"].tolist()))):
x =data[data["日期"]==day]['地区'].values.tolist()#选取指定日期地区数据
y=data[data["日期"]==day]['确诊病例'].values.tolist() #选取指定日期确诊数据
map_shape = (
Map()
.add("确诊病例",[list(z) for z in zip(x, y)])#打包输入地区及对应确诊数据
.set_series_opts(label_opts=opts.LabelOpts("{b}"))#配置系列参数,{b}为显示地区数据
.set_global_opts(
title_opts=opts.TitleOpts(title="举个例子"),#全局参数中设置标题
visualmap_opts=opts.VisualMapOpts(max_=1000,#设置映射配置项的最大值
is_piecewise=True,#设置是否为分段显示
pos_top = "60%",#映射配置项距图片上部的距离
pieces=[
{
"min": 1000, "label": '>1000人', "color": "#FF0000"}, # 分段指定颜色及名称
{
"min": 500, "max": 1000, "label": '500-1000人', "color": "#FF3333"},
{
"min": 100, "max": 499, "label": '100-499人', "color": "#FF6666"},
{
"min": 10, "max": 99, "label": '10-99人', "color": "#FF9999"},
{
"min": 1, "max": 9, "label": '1-9人', "color": "#FFCCCC"}])
))
tl.add(map_shape, "{}".format(day))#将不同日期的数据加入到timeline中
return tl
timeline_map(data).render_notebook()