大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。
Pyecharts是一个用于生成Echarts图表的库。Echarts是百度开源的一个数据可视化JS库,用Echarts生成的图可视化效果非常棒;pyecharts是为了与Python进行对接,方便在Python中直接使用数据生成图。
图形的参数配置是数据可视化的基础,pyecharts中的参数配置比较简单,可以分为全局配置项和系列配置项, 配置项的参考链接。
全局配置项,位于此文档中(/lib/python3.10/site-packages/pyecharts/options /global_options.py),可用set_global_options
设置。
系列配置项,位于此文档中(/lib/python3.10/site-packages/pyecharts/options /series_options.py),可用set_series_options
设置。
在可视化分析中,pyecharts可以在Jupyter Notebook和Jupyter Lab环境中运行;还可以生成HTML和图片。
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
make_snapshot(snapshot,t.render(),'t.png',browser='Safari')
"""
若使用的是谷歌,browser='Chrome'
勾选浏览器菜单栏:开发-允许远程自动化
"""
在pyecharts中,根据图表的调用方法、数据源格式的不一样,可大致分为以下几类(图表类型的参考链接):
以柱状图为例,此外还有:xy轴翻转、层叠多图(将多个直角坐标系的图表层叠到一个坐标轴中进行展示)。
from pyecharts.charts import Bar,Line
import pyecharts.options as opts
x = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo']
y1 = [123, 153, 89, 107, 98]
y2 = [102, 135, 88, 100, 79]
b = Bar()
b.add_xaxis(x)
b.add_yaxis(series_name='y1',y_axis=y1)
b.add_yaxis(series_name='y2',y_axis=y2)
b.set_global_opts(title_opts=opts.TitleOpts('不同商家各品牌的手机销量',padding=[10,60]))
b.set_series_opts(label_opts=opts.LabelOpts(position='insideTop'))
b.render_notebook()
''' xy轴翻转 '''
b.reversal_axis()
b.render_notebook()
from pyecharts.charts import Bar,Line
import pyecharts.options as opts
x = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo']
y1 = [123, 153, 89, 107, 98]
y2 = [102, 135, 88, 100, 79]
rate = [1.21, 1.13, 1.01, 1.07, 1.24]
b = (Bar()
.add_xaxis(x)
.add_yaxis('y1',y1,stack='a1',bar_width=50,)
.add_yaxis('y2',y2,stack='a1',bar_width=50)
.extend_axis(yaxis=opts.AxisOpts(name='比率',position='right'))
.extend_axis(yaxis=opts.AxisOpts(name='销量',position='left'))
.set_series_opts(label_opts=opts.LabelOpts(position='insideTop'))
)
l = (Line()
.add_xaxis(x)
.add_yaxis('比率',rate,yaxis_index=1,z=2)
)
b.overlap(l) #层叠多图
b.render_notebook()
地理图表中的参数maptype的取值,可查看此文档(/lib/python3.10/site-packages/pyecharts/datasets/map_filenames.json)。
以Map、Geo为例:
''' Map '''
from pyecharts.charts import Map
import pyecharts.options as opts
data = [('广东',61),('湖北',85),('湖南',115),('四川',137),('重庆',119),('河北',80),\
('黑龙江',66),('浙江',117),('山西',52),('安徽',99),('河南',101),('山东',75),('西藏',53)]
map = Map()
# 关闭鼠标缩放和平移漫游,不显示红点
map.add('',data,maptype='china',is_roam=False,is_map_symbol_show=False)
# 视觉组件是必须的,需通过视觉组件的颜色来展示数据大小
map.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=120))
map.render_notebook()
''' Geo '''
from pyecharts.charts import Geo
import pyecharts.options as opts
data = [('广东',61),('湖北',85),('湖南',115),('四川',137),('重庆',119),('河北',80),\
('黑龙江',66),('浙江',117),('山西',52),('安徽',99),('河南',101),('山东',75),('西藏',53)]
geo = Geo()
# is_roam:关闭鼠标缩放和平移漫游
# type_取值有scatter、effectScatter、heatmap、lines等
geo.add_schema(maptype='china',is_roam=False)
geo.add('',data,type_='heatmap')
# 视觉组件是必须的,需通过视觉组件的颜色来展示数据大小
geo.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=120))
geo.render_notebook()
''' Tree '''
from pyecharts.charts import Tree
import pyecharts.options as opts
data = [{'children':[{'name':'B'},
{'children':[{'children':[{'name':'I'}],'name':'E'},{'name':'F'}],
'name':'C'},
{'children':[{'children':[{'name':'J'}, {'name':'K'}],'name':'G'},{'name':'H'}],
'name':'D'}],
'name':'A'}]
tree = Tree()
tree.add('',data)
tree.render_notebook()
''' Bar3D '''
from pyecharts.charts import Bar3D
import pyecharts.options as opts
d = [['Apple','s1',123],['Huawei','s1',153],['Xiaomi','s2',89],['oppo','s2',107]]
b3d = Bar3D()
b3d.add('',d,)
b3d.set_global_opts(visualmap_opts=opts.VisualMapOpts(max_=160))
b3d.render_notebook()
from pyecharts import options as opts
from pyecharts.charts import Bar,Timeline
from pyecharts.faker import Faker
import random
attr = Faker.choose()
t1 = Timeline()# 创建 Timeline对象
for i in range(2000,2022):
attr1 = random.shuffle(list(attr)) #将序列的所有元素随机排序
bar = (Bar()
.add_xaxis(random.sample(attr,len(attr)))
.add_yaxis('Data',Faker.values(),label_opts=opts.LabelOpts(position = 'right'))
.reversal_axis()
.set_global_opts(title_opts = opts.TitleOpts("{}".format(i),pos_left = '50%'),\
legend_opts = opts.LegendOpts(pos_right = '10%'))
)
t1.add(bar,'{}年'.format(i))
# t1.add_schema 可设置播放时间等参数
t1.render_notebook()
其他图表,有日历图Calendar、漏斗图Funnel、仪表盘Gauge、饼图Pie、极坐标图Polar、雷达图Radar、旭日图Sunburst、词云WordCloud等;其使用方法,详见上述链接。
'''
DraggablePageLayout : 是令每个模块可以被任意拖动、缩放,便于人工布局;
SimplePageLayout : 是令每个模块自动水平居中对齐;
若不指定的话,所有模块就会靠左对齐;
'''
p = Page(layout=Page.DraggablePageLayout)
p.add(p1,p2)
p.render('hh.html')
p.render_notebook()
p.save_resize_html(source='hh.html',
cfg_file='/XXXXXX/chart_config.json',
dest='/XXXXXX/chart.html')
'''
使用浏览器打开 hh.html文件,对图表进行拖拉/调整位置或大小;
调整到一个适合的布局时,点击左上方的 Save Config按钮,下载chart_config.json配置文件;
source:生成的html文件名,如上;
cfg_file:下载的配置文件(chart_config.json)的地址
dest:要生成的新的html文件的路径
'''
谢谢大家