Python数据可视化
- Pyecharts(一) —— 配置项&图表类型
- 一、图形参数配置
- 1.1 全局配置项
- 1.2 系列配置项
- 1.3 运行环境
- 二、图表类型
- 2.1 直角坐标系图表
- 2.2 地理坐标系图表
- 2.3 树型图表
- 2.4 3D图表
- 2.4 组合图表
- 2.5 其他图表(如Page)
Pyecharts(一) —— 配置项&图表类型
大家可以关注知乎或微信公众号的share16,我们也会同步更新此文章。
Pyecharts是一个用于生成Echarts图表的库。Echarts是百度开源的一个数据可视化JS库,用Echarts生成的图可视化效果非常棒;pyecharts是为了与Python进行对接,方便在Python中直接使用数据生成图。
一、图形参数配置
图形的参数配置是数据可视化的基础,pyecharts中的参数配置比较简单,可以分为全局配置项和系列配置项, 配置项的参考链接🔗。
1.1 全局配置项
全局配置项,位于此文档中(/lib/python3.10/site-packages/pyecharts/options /global_options.py),可用set_global_options
设置。
- 基本元素配置项:主要包括InitOpts(初始化:含画布高/宽度、网页标题、图表主题、背景颜色等)、ToolBoxFeatureOpts(工具箱工具:含保存图片、配置项还原等)、ToolboxOpts(工具箱:含是否显示工具栏组件、工具栏icon的布局朝向等)、TitleOpts(标题:含主/副标题文本等)、LegendOpts(图例:含图例类型等)等;
- 坐标轴配置项:主要包括AxisLineOpts(坐标轴轴线:含是否显示坐标轴、轴线是否在另一个轴的0刻度上等)、AxisTickOpts(坐标轴刻度:含是否显示刻度、坐标轴刻度长度等)、AxisOpts(坐标轴:含坐标轴类型、名称、刻度最小/大值等)等;
- 原生图形配置项:主要包括GraphicGroup、GraphicItem等;
1.2 系列配置项
系列配置项,位于此文档中(/lib/python3.10/site-packages/pyecharts/options /series_options.py),可用set_series_options
设置。
- 样式类配置项:主要包括ItemStyleOpts(图元样式:含图形颜色、阴线图形颜色等)、TextStyleOpts(文字样式:含文字颜色、字体、大小等)、LabelOpts(标签:含是否显示标签、标签文字的设置等)等;
- 标记类配置项:主要包括MarkPointItem(标记点数据项)、MarkLineItem(标记线数据项)等;
- 其他类配置项:主要包括EffectOpts(涟漪特效)、AreaStyleOpts(区域填充样式)等;
1.3 运行环境
在可视化分析中,pyecharts可以在Jupyter Notebook和Jupyter Lab环境中运行;还可以生成HTML和图片。
- 在Jupyter Notebook中运行:如b.render_notebook()等;
- 在Jupyter Lab中运行:如bar.load_javascript()、bar.render_notebook()等;
- 生成HTML:如bar.render(‘xxx.html’)等;
- 生成图片:要提前安装selenium、snapshot_selenium包,代码如下
from pyecharts.render import make_snapshot
from snapshot_selenium import snapshot
make_snapshot(snapshot,t.render(),'t.png',browser='Safari')
"""
若使用的是谷歌,browser='Chrome'
勾选浏览器菜单栏:开发-允许远程自动化
"""
二、图表类型
在pyecharts中,根据图表的调用方法、数据源格式的不一样,可大致分为以下几类(图表类型的参考链接🔗):
- 直角坐标系图表:如折线图、柱状图、散点图、箱形图、热力图、K线图等;
- 地理坐标系图表:如Geo(地理坐标图)、Map(区域地图)、BMap(百度地图)等;
- 树型图表:如树图、矩形树图等;
- 3D图表:如3D柱状图、3D折线图、3D曲面图等;
- 组合图表:如时间线轮播多图、顺序多图、并行多图等;
- 其他图表:如日历图、漏斗图、仪表盘、饼图、极坐标图、雷达图、旭日图、词云等;
2.1 直角坐标系图表
以柱状图为例,此外还有:xy轴翻转、层叠多图(将多个直角坐标系的图表层叠到一个坐标轴中进行展示)。
from pyecharts.charts import Bar,Line
import pyecharts.options as optsx = ['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 optsx = ['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()
2.2 地理坐标系图表
地理图表中的参数maptype的取值,可查看此文档(/lib/python3.10/site-packages/pyecharts/datasets/map_filenames.json)。
以Map、Geo为例:
''' Map '''
from pyecharts.charts import Map
import pyecharts.options as optsdata = [('广东',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 optsdata = [('广东',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()
2.3 树型图表
''' Tree '''
from pyecharts.charts import Tree
import pyecharts.options as optsdata = [{'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()
2.4 3D图表
''' Bar3D '''
from pyecharts.charts import Bar3D
import pyecharts.options as optsd = [['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()
2.4 组合图表
from pyecharts import options as opts
from pyecharts.charts import Bar,Timeline
from pyecharts.faker import Faker
import randomattr = 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()
2.5 其他图表(如Page)
其他图表,有日历图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文件的路径
'''
谢谢大家 🌹