pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路
嗨, 大家好, 我是Jack, 一名自学python, 目前在一家上市公司工作的小小数据分析师。
如果大家要学python图表动态可视化, 强烈推荐pyechart工具包。首先它是中国制造, 其次确实很好用.
pyechart官网介绍 : Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时,pyecharts 诞生了
本文我们从柱形图的18种变化, 介绍pyechart的作图套路, 大家可以通过这些技巧扩展到其他的图表类型(曲线图,饼图,散点图等)
目录
- 1 python软件安装: 清华镜像
- 2 pyechart工具包安装
- 3 两种调用方式
- 4 作图套路
-
- 4.1 坐标轴太长增加旋转: rotate参数
- 4.2 堆积柱形图: stack参数
- 4.3 设置不同主题风格: theme参数
- 4.4 自定义背景色: bg_color参数
- 4.5 区域选择组件: brush_opts参数
- 4.6 水平数据缩放: datazoom_opts参数
- 4.7 右上角显示工具栏: toolbox_opts参数
- 4.8 提示框: tooltip_opts参数
- 4.9 坐标轴的名称及位置: axis_opts参数
- 4.10 y轴标签增加单位: yaxis_opts参数
- 4.11 标记最大值、最小值: markpoint_opts参数
- 4.12 柱形图之间间距: category_gap参数
- 4.13 添加辅助线: markline_opts参数
- 4.14 系列设置是否默认选中: is_selected参数
- 4.15 x y轴旋转,形成条形图: reversal_axis()参数
- 4.16 系列颜色: color参数
- 4.17 数据标签: is_show参数
- 4.18 隐藏Y轴: yaxis_opts参数
1 python软件安装: 清华镜像
python开发软件有很多, 比如pycharm、Jupyter notebook、spyder, 推荐安装Anaconda, 它自带jupyter notebook和spyder, 适合初学者.
下载适合自己电脑的版本, 用Anaconda最大的优势是基本不用再去安装其他的工具包, 如果手动安装工具包会出现版本不兼容或者要安装很多依赖包的问题。
2 pyechart工具包安装
pyechart工具包需要手动安装: 请安装V1.0以上版本, pyechartV0.5版本和V1.0版本不兼容
pip install pyecharts -U
3 两种调用方式
pyechart所使用的图表都放在 pyecharts.charts 里面, 每次都需要导入对应的图表, 比如柱形图:
from pyecharts.charts import Bar
还有其他很多, 需要哪几个就导入哪几个
from pyecharts.charts import Bar ,Pie,Grid,Line,Boxplot,
Scatter,EffectScatter,Kline,Geo,Pie,Map,Funnel,
Gauge,Liquid,Calendar,Polar,Radar,Sunburst,ThemeRiver,
WordCloud,Scatter3D,MapGlobe,Sankey
# 柱形图,饼图,组合图,线形图,盒形图,
# 散点图,涟漪图,k线图,地图,饼图,地图,漏斗图,
# 仪表盘图,水球图,日历图,极坐标系,雷达图,旭日图,河流图,
# 词云图,3D散点图,3D地球,桑基图
3.1 调用方式1: 容易理解
from pyecharts.charts import Bar
bar = Bar()
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
bar.render()
以上代码翻译大致如下: 从pyecharts.charts工具箱中拿出Bar小工具, 用这个小工具做了一个柱子(还只是毛坯), 然后对柱子进行装饰(添加数据等)
3.1.1 那对柱子可以做哪些装饰呢, 可以从官网的这里面找: 柱形图设置→
3.1.2 在对柱子进行装饰的时候, 有时候会对整个图表或者系列进行详细的设置, 就需要用到 .set_global_opts和 .set_series_opts,
3.2 调用方式2: 简洁
from pyecharts.charts import Bar
bar = (
Bar()
.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
)
bar.render()
效果和第1种一样, 第1种比较好理解, 第2中比较简洁. 第2种要注意括号成对出现, 代码末尾逗号,及缩进问题。
pyechart让人不太好弄懂的地方就是图表元素之间一层层嵌套关系, 接下来我们来一一介绍:
4 作图套路
为了便于理解, 适合工作中使用, 我们用Faker工具包生成模拟数据。
工具包安装:
pip install faker
4.1 坐标轴太长增加旋转: rotate参数
模拟dataframe数据, 如果是excel文件可用pandas.read_excel()读取
4.1.1 数据
import faker
faker.Faker.seed(10) # 每次随机数不变
import pandas as pd
import numpy as np
np.random.seed(10000) # 每次随机数不变
f = faker.Faker(locale='zh-CN')
data = pd.DataFrame()
for i in range(10):
datai = pd.DataFrame({'公司':f.company(),
'销售额':np.random.randint(100,300,1)},
index = [i])
data = data.append(datai)
data
4.1.2 作图
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['公司'].tolist())
.add_yaxis("销售额", data['销售额'].tolist())
.set_global_opts(
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)), # x轴旋转
title_opts=opts.TitleOpts(title="公司销售额对比", subtitle="x轴文字过长调整"),
)
.render("柱形图_x轴旋转.html"))
pyechart中有很多类似于下面这种写法, 参数一层层嵌套:
.set_global_opts(xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-15)))
在 pyecharts 中,一切皆 Options。经常用到options 配置项。
除设置rotate外, 还可以设置
is_show: 是否显示 True False
color: 颜色
font_size: 字体大小 整数
font_style: 文字风格 ‘normal’,‘italic’,‘oblique’
font_weight: 字体粗细 ‘normal’,‘bold’,‘bolder’,‘lighter’
font_family: 字体 ‘serif’ , ‘monospace’, ‘Arial’, ‘Courier New’, ‘Microsoft YaHei’,
更多详细设置: 标签配置项
4.2 堆积柱形图: stack参数
4.2.1 模拟数据
import faker
faker.Faker.seed(1) # 每次随机数不变
import pandas as pd
import numpy as np
np.random.seed(1) # 每次随机数不变
f = faker.Faker(locale='zh-CN')
data = pd.DataFrame()
for i in range(10):
datai = pd.DataFrame({'员工姓名':f.name(),
'1月销售额':np.random.randint(100,300,1),
'2月销售额':np.random.randint(100,300,1)},
index = [i])
data = data.append(datai)
data
4.2.2 作图
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("堆积柱形图.html"))
设置stack参数为同一名称即可
4.3 设置不同主题风格: theme参数
还是以上面的数据为例:
4.3.1 黑色背景
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='dark'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("堆积柱形图_主题.html"))
4.3.2 蓝色背景
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("堆积柱形图_主题.html"))
theme参数的15个风格: ‘chalk’,‘dark’, essos’, ‘infographic’, ‘light’, ‘macarons’,
‘purple-passion’, ‘roma’, ‘romantic’, ‘shine’, ‘vintage’, ‘walden’, ‘westeros’, ‘white’, ‘wonderland’
4.4 自定义背景色: bg_color参数
除了设置theme参数外, 还可以通过其他参数修改图表背景色, 还是以上面的数据为例
4.4.1 参数写法1: 16进制格式
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(bg_color='#c0fefc'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("堆积柱形图_背景色.html"))
4.4.2 参数写法2: RGB值及透明度
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(bg_color='rgba(192, 254, 252, 0.2)'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("堆积柱形图_背景色_透明度.html"))
bg_color参数的两种颜色设置方法, 16进制格式和RGB格式, 其中RGB格式可设置透明度
4.5 区域选择组件: brush_opts参数
还是以上面的数据为例
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(), stack="stack1")
.add_yaxis("2月", data['2月销售额'].tolist(), stack="stack1")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"),
brush_opts=opts.BrushOpts())
.render("堆积柱形图_工具栏.html"))
设置brush_opts参数, 更详细的设置可点击→
设置brush_opts参数, 更多配置项→
4.6 水平数据缩放: datazoom_opts参数
4.6.1 模拟数据
import pandas as pd
import numpy as np
np.random.seed(1) # 每次随机数不变
data = pd.DataFrame({'日期':pd.period_range('2020-1-1',periods=100),
'销售额':np.random.randint(100,300,100)})
data
4.6.2 作图
c = (
Bar()
.add_xaxis([str(i) for i in data['日期']])
.add_yaxis("销售额", data['销售额'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="销售额分析"),
datazoom_opts=opts.DataZoomOpts(), # 水平缩放 orient="vertical" 垂直数据缩放
)
.render("水平缩放.html"))
datazoom_opts参数, 默认是对x轴设置, orient="vertical"对y轴设置. 更多配置项→
4.7 右上角显示工具栏: toolbox_opts参数
还是以上面的数据为例
c = (
Bar()
.add_xaxis([str(i) for i in data['日期']])
.add_yaxis("销售额", data['销售额'].tolist())
.set_global_opts(
title_opts=opts.TitleOpts(title="销售额分析"),
toolbox_opts=opts.ToolboxOpts(),
)
.render("工具栏.html"))
设置toolbox_opts参数, 更多配置项→
4.8 提示框: tooltip_opts参数
4.8.1 模拟数据
import faker
faker.Faker.seed(10) # 每次随机数不变
import pandas as pd
import numpy as np
np.random.seed(10) # 每次随机数不变
f = faker.Faker(locale='zh-CN')
data = pd.DataFrame()
for i in range(10):
datai = pd.DataFrame({'员工姓名':f.name(),
'销售额':np.random.randint(100,300,1)},
index = [i])
data = data.append(datai)
data
4.8.2 作图
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"),
tooltip_opts=opts.TooltipOpts(is_show=True,
trigger="axis",
axis_pointer_type="cross"))
.render("堆积柱形图_提示框.html"))
trigger: 提示器三种方式: 'item’数据项图形触发,主要在散点图,饼图等无类目轴的图表中使用,'axis’坐标轴触发,主要在柱状图,折线图等会使用类目轴的图表中使用,'none’什么都不触发
trigger_on: 触发条件, ‘mousemove’: 鼠标移动时触发。 ‘click’: 鼠标点击时触发。‘mousemove|click’: 同时鼠标移动和点击时触发。‘none’: 不在 ‘mousemove’ 或 ‘click’ 时触发,
axis_pointer_type: 提示器类型. ‘line’:直线指示器(默认),‘shadow’:阴影指示器,‘none’:无指示器,‘cross’:十字准星指示器。
提示器更多配置项→
axis_pointer_type 设置成shadow后,效果如下:
4.9 坐标轴的名称及位置: axis_opts参数
还是以上面的数据为例
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"),
yaxis_opts=opts.AxisOpts(name="销售额",
name_location='middle',
name_gap=30),
xaxis_opts=opts.AxisOpts(name="姓名",
name_location='middle',
name_gap=30),
)
.render("堆积柱形图_轴名称.html"))
name: 轴名称 ,name_location: 名称位置( ‘start’, ‘middle’ 或者 ‘center’,‘end’),name_gap:坐标轴名称与轴线之间的距离。
更多配置项设置→
4.10 y轴标签增加单位: yaxis_opts参数
以上面数据为例
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"),
yaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(formatter="{value} /万元"))
)
.render("堆积柱形图_增加单位.html"))
4.11 标记最大值、最小值: markpoint_opts参数
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(type_="max", name="最大值"),
opts.MarkPointItem(type_="min", name="最小值")]))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"))
.render("堆积柱形图_添加最值.html"))
4.11.1 自定义标记点
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markpoint_opts=opts.MarkPointOpts(data=[opts.MarkPointItem(name="自定义标记点",
coord=[data['员工姓名'][2],
data['销售额'].tolist()[2]],
value=data['销售额'].tolist()[2])]))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"))
.render("堆积柱形图_自定义标记点.html"))
name: 标记名称; type_: min,max, average; symbol: 标记点样式 ‘circle’, ‘rect’, ‘roundRect’, ‘triangle’, ‘diamond’, ‘pin’, ‘arrow’, ‘none’
更多配置项→
4.12 柱形图之间间距: category_gap参数
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist(),category_gap="50%")
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"))
.render("堆积柱形图_间距_40%.html"))
4.13 添加辅助线: markline_opts参数
4.13.1 均值 最大值 最小值
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts( # 辅助线
data=[opts.MarkLineItem(type_="min", name="最小值"),
opts.MarkLineItem(type_="max", name="最大值"),
opts.MarkLineItem(type_="average", name="平均值")]))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"))
.render("堆积柱形图_辅助线.html"))
4.13.2 自定义参考线
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar(init_opts=opts.InitOpts(theme='westeros'))
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("", data['销售额'].tolist())
.set_series_opts(label_opts=opts.LabelOpts(is_show=False),
markline_opts=opts.MarkLineOpts(
data=[opts.MarkLineItem(y=150, name="水平参考线"),
opts.MarkLineItem(x=5, name="垂直参考下")],
label_opts= opts.LabelOpts(formatter="{b}"),
linestyle_opts=opts.LineStyleOpts(color='#1cc5dc',
type_='dotted')))
.set_global_opts(title_opts=opts.TitleOpts(title="销售额分析"))
.render("堆积柱形图_自定义辅助线.html"))
4.14 系列设置是否默认选中: is_selected参数
4.14.1 模拟数据
import faker
faker.Faker.seed(1) # 每次随机数不变
import pandas as pd
import numpy as np
np.random.seed(1) # 每次随机数不变
f = faker.Faker(locale='zh-CN')
data = pd.DataFrame()
for i in range(10):
datai = pd.DataFrame({'员工姓名':f.name(),
'1月销售额':np.random.randint(100,300,1),
'2月销售额':np.random.randint(100,300,1)},
index = [i])
data = data.append(datai)
data
4.14.2 作图
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(),gap="0%")
.add_yaxis("2月", data['2月销售额'].tolist(),gap="0%",is_selected=False)
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="堆积柱形图"))
.render("默认选中.html"))
is_selected 参数, 当图中有多个系列时, 可设置, 图表更简洁. 更多配置项→
4.15 x y轴旋转,形成条形图: reversal_axis()参数
对上面的数据进行处理
data_re = data[['员工姓名','1月销售额']].sort_values(by='1月销售额')
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data_re['员工姓名'].tolist())
.add_yaxis("", data_re['1月销售额'].tolist(),gap="0%")
.reversal_axis()
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售分析"))
.render("条形图.html"))
4.16 系列颜色: color参数
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(),color='#325288')
.add_yaxis("2月", data['2月销售额'].tolist(),color='#f5cebe')
.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
.set_global_opts(title_opts=opts.TitleOpts(title="销售分析"))
.render("系列颜色.html"))
更多颜色可参考: https://colorhunt.co/palettes/blue
4.17 数据标签: is_show参数
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['员工姓名'].tolist())
.add_yaxis("1月", data['1月销售额'].tolist(),color='#325288')
.add_yaxis("2月", data['2月销售额'].tolist(),color='#f5cebe')
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(title_opts=opts.TitleOpts(title="销售分析"))
.render("数据标签.html"))
4.18 隐藏Y轴: yaxis_opts参数
4.18.1 模拟数据
import faker
faker.Faker.seed(1) # 每次随机数不变
import pandas as pd
import numpy as np
np.random.seed(1) # 每次随机数不变
f = faker.Faker(locale='zh-CN')
data = pd.DataFrame()
for i in range(6):
datai = pd.DataFrame({'招聘岗位':f.job(),
'访问量':np.random.randint(400,800,1)},
index = [i])
data = data.append(datai)
data
4.18.2 作图
from pyecharts import options as opts
from pyecharts.charts import Bar
c = (
Bar()
.add_xaxis(data['招聘岗位'].tolist())
.add_yaxis("", data['访问量'].tolist(),color='#325288')
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
.set_global_opts(title_opts=opts.TitleOpts(title="招聘分析"),
yaxis_opts=opts.AxisOpts(is_show=False))
.render("隐藏坐标轴.html"))
以上就是柱形图的18个技巧, 实际工作中需要我们进行组合运用!
官网提供了更多的设置方法, 我们掌握其中的套路就可以定制我们想要的动态图表, 举个栗子:
- 1 官网中实例化柱形图有个参数 init_opts, 官网提示参考global_options.InitOpts,
- 2 找到InitOpts: 初始化配置项, 就可以利用这个配置项设置更多的参数: width, height, theme, bg_color等, 比如:
Bar(init_opts=opts.InitOpts(theme='westeros',width='1500px',height='600px',gb_color='blue'))
- 3 复杂的设置可能需要嵌套多层
如果对你帮助, 欢迎点赞、关注!
相关阅读推荐:
1. python小白, 1周入门python数据分析视频课程
2. pyechart可视化18式丨从柱形图的变化, 搞懂pyechart作图套路
3. 懂点excel作图, 怎么让pyechart作的图更具“职场范“呢?
4. 8个常用的python办公室自动化技巧,学会了同事都找你!
5. 学习python数据分析的30个练手数据+4个数据集网站