简介
pyecharts 是一个用于生成 ECharts 图表的 Python 库Echarts 是由百度开发的基于JavaScript的开源数据可视化工具库,具有良好的交互性,精巧的图表设计,在数据可视化领域应用广泛。pyecharts 让 Python 用户能够方便地使用 Python 代码创建 ECharts 图表。
基础知识
绘图逻辑依照四步,
1.明确要画什么图,并进行实例化
2.使用.add()函数添加元素(包括数据、轴、刻度标签等)
3.使用options配置项,对图形界面进行修改配置
4.用.render()渲染生成一个独立的网页
下面我们来详细讲解。
导入库
老规矩,没有下载过pyecharts的童鞋先下载一下
pip install pyecharts
常用图表
图表 | 类名 | 图表 | 类名 |
---|---|---|---|
柱状图 | Bar() | 折线图 | Line() |
散点图 | Scatter() | 热力图 | HeatMap() |
箱线图 | Boxplot() | 日历图 | Calendar() |
漏斗图 | Funnel() | 饼图 | Pie() |
雷达图 | Radar() | 桑基图 | Sankey() |
阳光图 | Sunburst() | 平行坐标系图 | Parallel() |
地理坐图 | Geo() | 地图 | Map() |
以上大多图表我们下面都会讲解,当然还有许多其他的图表,大家可以去探索。
配置项
配置项主要包括两个,全局配置项(set_global_opts)以及系列配置项(set_series_opts())。
全局配置项
全局配置项主要负责对图形界面区域进行修改配置,包括图表中的标题、图例、工具箱、色谱、提示框、时间轴等。
下面给出几个常用的全局配置项的配置方法。
种类 | 配置方法 |
---|---|
主标题 副标题 | opts.TitleOpts(title=‘’, subtitle=‘’, item_gap=10 ) |
图形显示及排列 | opts.LegendOpts(is_show=True, orient=‘horizontal’) |
工具箱显示及排列 | opts.ToolboxOpts(is_show=True, orient=‘horizontal’) |
提示框显示及触发条件 | opts.TooltipsOpst(is_show=True, trigger=‘item’) |
色谱显示及相关设置 | opts.VisualMapOpts(is_show=True, type_=‘color’, min_=0, max_=100, is_piecewise=False) |
系列配置项
系列配置项主要控制图表中的文本、线样式、标记、标签等。
同样给出几个常用的系列配置项方法。
种类 | 配置方法 |
---|---|
标签显示及文字设置 | opts.LabelOpts(is_show=True, position=‘top’, font_size=10 ) |
线条显示及形状 | opts.LineStyleOpts(is_show=True, width=1, type_=‘solid’) |
标记点内容及形状 | opts.MarkPointOpts(data=, symbol=‘circle’) |
轴类型及位置 | opts.AxisOpts(type_=‘value’, name=‘’) |
柱状图
好了,了解了pyecharts相关的配置,接下来我们就可以开始绘图了(~ ̄▽ ̄)~
我们先来一张简单的柱状图来过一遍整个流程
from pyecharts.charts import Bar #实例化导入库
#Jupyter Lab 渲染的时候在顶部声明 Notebook 类型,必须在引入 pyecharts.charts 等模块前声明
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB
from pyecharts import options as opts #options配置
#使用链式调用
bar = (
Bar() #创建一个对象(实例化,要画什么图)
.add_xaxis(['洗衣机','冰箱','微波炉','电磁炉','电视','空调']) #.add()函数添加元素(图中的一切元素)
.add_yaxis('商家A',[234,210,3236,1560,745,960])
.set_global_opts(title_opts=opts.TitleOpts(title="主标题",subtitle="副标题")) #标题配置项 #set_global_opts全局配置项
#或者直接使用字典参数.set_global(title_opts=("text":"主标题","subtext":"副标题"))
)
bar.load_javascript() #Jupyter Lab 第一次渲染的时加载 javascripe 文件
bar.render_notebook() #在notebook中显示图表
#bar.render会生成本地html文件,默认会在当前目录生成render.heml文件
#也可以传入路径参数,如bar.render('mycharts.html')
当然了,上述方法是链式调用方法,我们还可以对他进行单独调用,代码如下,会产生和上图一样的效果。
#单独调用
bar = Bar() #创建一个对象(实例化,要画什么图)
bar.add_xaxis(['洗衣机','冰箱','微波炉','电磁炉','电视','空调']) #.add()函数添加元素(图中的一切元素)
bar.add_yaxis('商家A',[234,210,3236,1560,745,960])
bar.set_global_opts(title_opts=opts.TitleOpts(title="主标题",subtitle="副标题")) #标题配置项 #set_global_opts全局配置项
好了,现在我们已经了解了大概的流程,下面我们开始升级难度。
分组柱状图
绘制一个按年份分组的柱状图,代码如下
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB #JupyterHub中加入这两句正常显示图片
s_bar = Bar(init_opts=opts.InitOpts(width='800px',
height='400px',
theme='light',
bg_color='#cccccc'))
s_bar.add_xaxis(['spring','summer','fall','winter'])
s_bar.add_yaxis('2011',s_count1_2011,gap="0%")
s_bar.add_yaxis('2012',s_count1_2012,gap="0%")
s_bar.set_global_opts(
title_opts=opts.TitleOpts(title="用户量柱状图"),
yaxis_opts=opts.AxisOpts(name="count"),
xaxis_opts=opts.AxisOpts(name="season")
)
s_bar.load_javascript()
s_bar.render_notebook()
折线图
下面我们绘制一个简单的分组折线图
#2011、2012年,各月份用户量波动趋势
from pyecharts.charts import Line
#折线图
m_line = Line()
m_line.add_xaxis(range(1,13))
m_line.add_yaxis('2011',m_count_2011['count'])
m_line.add_yaxis('2012',m_count_2012['count'])
m_line.set_global_opts(
title_opts=opts.TitleOpts(title="2011、2012各月份用户量趋势"),
yaxis_opts=opts.AxisOpts(name="count"),
xaxis_opts=opts.AxisOpts(name="month")
)
m_line.render_notebook()
饼图
基础饼图
我们再来学习如何绘制一张基础饼图吧。
from pyecharts.globals import CurrentConfig, NotebookType
CurrentConfig.NOTEBOOK_TYPE = NotebookType.JUPYTER_LAB #JupyterHub中加入这两句正常显示图片
from pyecharts import options as opts
from pyecharts.charts import Pie
# 饼图
s_pie = Pie()
s_pie.add('2011', [list(z) for z in zip([1, 2, 3, 4], s_count['2011'])]) #将列表[1, 2, 3, 4]和s_count数据框中'2011'列的数据进行配对,然后将每对元素转换为列表,最终得到一个包含多组数据的列表
s_pie.set_global_opts(
title_opts=opts.TitleOpts(title="2011各季度用户量比例"), #主标题设置
legend_opts=opts.LegendOpts(is_show=True) # 设置图例显示
)
s_pie.set_series_opts(
label_opts=opts.LabelOpts(formatter="{b}:{d}%") #设置图例选项
)
s_pie.render_notebook()
环状图
下面再来进阶一下,画一个环状图,和饼图有异曲同工之处。
# 环形图
s_pie=Pie()
s_pie.add('2011',[list(z) for z in zip([1,2,3,4],s_count['2011'])],radius=[80,120] #这是设置环形图的内外半径。80 是内半径,120 是外半径,通过设置不同的内外半径,将原本的饼图变成了环形图
)
s_pie.set_global_opts(
title_opts = opts.TitleOpts(title="2011各季度用户量比例"), legend_opts=opts.LegendOpts(is_show=True) )
s_pie.set_series_opts(
label_opts = opts.LabelOpts(formatter="{b}:{d}%")#通过 opts.LabelOpts 类设置标签的显示格式。{b} 表示数据项的名称(这里是季度编号),{d} 表示数据项所占的百分比,所以标签会以 “季度编号:百分比” 的格式显示
)
s_pie.render_notebook()
南丁格尔玫瑰图
南丁格尔玫瑰图的绘制也类似,具体方法如下。
#南丁格尔玫瑰图
s_pie=Pie()
s_pie.add('2011',
[list(z) for z in zip(range(1,13),m_count_2011['count'])],
rosetype='area'#设置玫瑰图的类型为 “面积模式”,也就是扇区的面积和数据值成正比。
)
s_pie.set_global_opts(
title_opts = opts.TitleOpts(title="2011各季度用户量比例"),
legend_opts=opts.LegendOpts(orient='vertical',
pos_left='left',
pos_top='middle') )
s_pie.set_series_opts(
label_opts = opts.LabelOpts(formatter="{b}:{d}%")#通过 opts.LabelOpts 类设置标签的显示格式。{b} 表示数据项的名称(这里是季度编号),{d} 表示数据项所占的百分比,所以标签会以 “季度编号:百分比” 的格式显示
)
s_pie.render_notebook()
多图
在matplotlib中,我们可以使用subplot来绘制多图,那么pyecharts中该如何做呢?只需要分别添加,然后将这两个饼图组合在一个图表中就可以了
#多图
s_pie=Pie()
s_pie.add('2011',
[list(z) for z in zip([1,2,3,4],s_count['2011'])],
center=['30%','50%'],
radius=[60,80] #这是设置环形图的内外半径。80 是内半径,120 是外半径
)
s_pie.add('2012',
[list(z) for z in zip([1,2,3,4],s_count['2012'])],
center=['65%','50%'],
radius=[0,40] #这是设置环形图的内外半径。0 是内半径,40 是外半径,通过设置不同的内外半径,将原本的饼图变成了环形图
)
s_pie.set_global_opts(
title_opts = opts.TitleOpts(title="2011、2012各季度用户量比例"), legend_opts=opts.LegendOpts(is_show=True) )
s_pie.set_series_opts(
label_opts = opts.LabelOpts(formatter="{b}:{d}%")#通过 opts.LabelOpts 类设置标签的显示格式。{b} 表示数据项的名称(这里是季度编号),{d} 表示数据项所占的百分比,所以标签会以 “季度编号:百分比” 的格式显示
)
s_pie.render_notebook()
结语
今天的内容主要介绍了一些简单的图形绘制,明天我们会继续讲解其他的图形,包括雷达图、日历图、平行坐标系图、地图等等,包括我们最后会完成一个可视化大屏的制作,生成一个HTML文件,帮助大家更好的进行可视化工作。
创作不易,亲亲求点赞求收藏呀ヾ(=・ω・=)o