数据可视化之pyecharts
ECharts
  ECharts是什么?下⾯是来⾃官⽅的介绍:
ECharts,缩写来⾃Enterprise Charts,商业级数据图表,⼀个纯Javascript的图表库,可以流畅的运⾏在PC和移动设备上,兼容当前绝⼤部分浏览器
(IE6/7/8/9/10/11,chrome,firefox,Safari等),
底层依赖轻量级的Canvas类库ZRender,提供直观,⽣动,可交互,可⾼度个性化定制的数据可视化图表。创新的拖拽重计算、数据视图、值域漫游等特性⼤⼤增强了⽤户体验,
赋予了⽤户对数据进⾏挖掘、整合的能⼒。⽀持折线图(区域图)、柱状图(条状图)、散点图(⽓泡图)、K线图、饼图(环形图)、雷达图(填充雷达图)、和弦图、
⼒导向布局图、地图、仪表盘、漏⽃图、事件河流图等12类图表,同时提供标题,详情⽓泡、图例、值域、数据区域、时间轴、⼯具箱等7个可交互组件,⽀持多图表、组件的联动和混搭展现。
pyecharts
⼀、pyecharts是什么?
pyecharts 是⼀个⽤于⽣成 Echarts 图表的类库。Echarts 是百度开源的⼀个数据可视化 JS 库。⽤ Echarts ⽣成的图可视化效果⾮常棒,pyecharts 是为了与 Python 进⾏对接,⽅便在 Python 中直接使⽤数据⽣成图。
⼆、为什么要有pyecharts?
使⽤echarts还是需要⼀定的前端知识,我们python的特点主要是什么?为什么这么多⼈都喜欢⽤python?Pythonic Pythonic就是以Python的⽅式写出简洁优美的代码!短短⼏⾏代码就能搞定⼀个很复杂的图例!
三、如何使⽤pyecharts?
安装:
  pip install pyecharts
  pip install pyecharts-snapshot
相关函数
add()    主要⽅法,⽤于添加图表的数据和设置各种配置项
show_config()    打印输出图表的所有配置项
render()    默认将会在根⽬录下⽣成⼀个 render.html 的⽂件,⽀持 path 参数,设置⽂件保存位置,如 render(r"e:my_first_chart.html"),⽂件⽤浏览器打开。
图表配置:图形初始化,通⽤配置项
xyAxis:平⾯直⾓坐标系中的 x、y 轴。(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 组件⽤于区域缩放,从⽽能⾃由关注细节的数据信息,或者概览数据整体,或者去除离点的影响。(Line、Bar、Scatter、
EffectScatter、Kline、Boxplot)
legend:图例组件。图例组件展现了不同系列的标记(symbol),颜⾊和名字。可以通过点击图例控制哪些系列不显⽰。
label:图形上的⽂本标签,可⽤于说明图形的⼀些数据信息,⽐如值,名称等。
lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)
grid3D:3D笛卡尔坐标系组配置项,适⽤于 3D 图形。(Bar3D, Line3D, Scatter3D)
axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项,适⽤于 3D 图形。(Bar3D, Line3D, Scatter3D)
visualMap:是视觉映射组件,⽤于进⾏『视觉编码』,也就是将数据映射到视觉元素(视觉通道)
markLine&markPoint:图形标记组件,⽤于标记指定的特殊数据,有标记线和标记点两种。(Bar、Line、Kline)
tooltip:提⽰框组件,⽤于移动或点击⿏标时弹出数据内容
toolbox:右侧实⽤⼯具箱
详细:
a:⽅法签名:
1
2
3
add(name, x_axis, y_axis,
is_stack=False,
bar_category_gap='20%', **kwargs)
⽅法作⽤
name -> str
图例名称 x_axis -> list
x 坐标轴数据 y_axis -> list
y 坐标轴数据 is_stack -> bool
数据堆叠,同个类⽬轴上系列配置相同的 stack 值可以堆叠放置 bar_category_gap -> int/str
类⽬轴的柱状距离,当设置为 0 时柱状是紧挨着(直⽅图类型),默认为'20%'
注:全局配置项要在最后⼀个add()上设置,否侧设置会被冲刷掉。
b.使⽤标记点和标记线
mark_point=["average"]和mark_line=["min", "max"]函数即可设置标记点和标记线
c.is_convert属性
该属性设置为True后is_convert=True即可交换x轴和y轴
d.dataZoom效果
dataZoom组件⽤于区域缩放,达到能⾃由关注细节的数据信息,或者概览数据整体,或者去除离点的影响。
'slider'类型
有单独的滑动条,⽤户在滑动条上进⾏缩放或漫游。代码运行js特效
加⼊is_label_show=True, is_datazoom_show=True即可。
'inside'类型
内置于坐标系中,使⽤户可以在坐标系上通过⿏标拖拽、⿏标滚轮、⼿指滑动(触屏上)来缩放或漫游坐标系。
加⼊
1
2
3
is_datazoom_show=True,
datazoom_type="inside",
datazoom_range=[10, 25],
即可
'both'类型
加⼊
1
2
3
is_datazoom_show=True,
datazoom_type="both",
datazoom_range=[10, 25],
即可
多 dataZoom 效果,效果同时⽀持 X、Y 轴
加⼊
1
2
3
4
5
6
7
8
9
# 默认为 X 轴,横向
is_datazoom_show=True,
datazoom_type="slider",
datazoom_range=[10, 25],
# 新增额外的 dataZoom 控制条,纵向
is_datazoom_extra_show=True,
datazoom_extra_type="slider",
datazoom_extra_range=[10, 25],
is_toolbox_show=False,
即可
注:datazoom 适合所有平⾯直⾓坐标系图形,也就是(Line、Bar、Scatter、EffectScatter、Kline)。
e.当 x 轴或者 y 轴的标签因为过于密集⽽导致全部显⽰出来会重叠的话,可采⽤使标签旋转的⽅法
加⼊xaxis_interval=0, xaxis_rotate=30, yaxis_rotate=30即可
注:可通过设置 xaxis_min/xaxis_max/yaxis_min/yaxis_max 来调整 x 轴和 y 轴上的最⼤最⼩值。针对数值轴有效!。
可以通过 label_color 来设置柱状的颜⾊,如 ['#eee', '#000'],所有的图表类型的图例颜⾊都可通过 label_color 来修改。
(3) 瀑布图和直⽅图这⾥就不介绍了,具体⼤家可以参看百度的pyecharts介绍
(4) Bar属性设置
a.通过在Bar中设置extra_html_text_label=["bar_extra_html_text_label", "color:red"])即可得到额外的⽂本标签。
b.通过在Bar中设置xaxis_line_color="green", xaxis_line_width=5, xaxis_label_textcolor="black",或yaxis_line_color="green", yaxis_line_width=5, yaxis_label_textcolor="black",可以控制X/Y轴坐标轴颜⾊以及宽度。
(5) 进⾏两次add的时候,有⼀次的某项数据丢失,可以⽤0补充。
View Code
简单使⽤:
from pyecharts import Pie
attr = ["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"]
v1 = [11, 12, 13, 10, 10, 10]
pie = Pie("饼图⽰例")
pie.add("", attr, v1, is_label_show=True)
运⾏render.html
雷达图⽰例:
from pyecharts import Radar
# schema列表中的数字代表各维度的最⼤值,v1和v2中的值最⼤不能超过该限制,可以刚刚达到
schema = [
("销售", 6500), ("管理", 16000), ("信息技术", 30000),
("客服", 38000), ("研发", 52000), ("市场", 25000)
]
v1 = [[6500, 10000, 28000, 35000, 50000, 19000]]
v2 = [[5000, 16000, 28000, 31000, 42000, 21000]]
radar = Radar()
radar.add("预算分配", v1, is_splitline=True, is_axisline_show=True)
radar.add("实际开销", v2, label_color=["#4e79a7"], is_area_show=False,
legend_selectedmode='single')
地理坐标系线图⽰例:
from pyecharts import GeoLines, Style
style = Style(
title_top="#fff",
title_pos = "center",
width=1200,
height=600,
background_color="#404a59"
)
style_geo = style.add(
is_label_show=True,
line_curve=0.2,
line_opacity=0.6,
legend_text_color="#eee",
legend_pos="right",
geo_effect_symbol="plane",
geo_effect_symbolsize=15,
label_color=['#a6c84c', '#ffa022', '#46bee9'],
label_pos="right",
label_formatter="{b}",
label_text_color="#eee",
)
data_guangzhou = [
["⼴州", "上海"],
["⼴州", "北京"],
["⼴州", "南京"],
["⼴州", "重庆"],
["⼴州", "兰州"],
["兰州", "⼴州"],
["⼴州", "杭州"]
]
geolines = GeoLines("GeoLines ⽰例", **style.init_style)
geolines.add("从⼴州出发", data_guangzhou, **style_geo)
⾃从 v0.3.2 开始,为了缩减项⽬本⾝的体积以及维持 pyecharts 项⽬的轻量化运⾏,pyecharts 将不再⾃带地图 js ⽂件。如⽤户需要⽤到地图图表,可⾃⾏安装对应的地图⽂件包。下⾯介绍如何安装。
1. :  (1.9MB): 世界地图和 213 个国家,包括中国地图
2. :  (730KB):23 个省,5 个⾃治区
3. :  (3.8MB):370 个中国城市
4. :  (4.1MB):2882 个中国县·区
5. :  (148KB):11 个中国区域地图,⽐如华南、华北。
特别注明,中国地图在 echarts-countries-pypkg ⾥。需要这些地图的朋友,可以装 pip 命令⾏: pip3 install echarts-countries-pypkg
pip3 install echarts-china-provinces-pypkg
pip3 install echarts-china-cities-pypkg
pip3 install echarts-china-counties-pypkg
pip3 install echarts-china-misc-pypkg
地图⽰例:
from pyecharts import Map
value = [155, 10, 66, 78, 33, 80, 190, 53, 49.6]
attr = [
"陕西", "⼭东", "北京", "上海", "⽢肃", "新疆", "河南", "⼴西", "西藏"
]
map = Map("Map 结合 VisualMap ⽰例", width=1200, height=600)
map.add(
"统计各省⼈⼝数",
attr,
value,
maptype='china',
is_visualmap=True, #结合体VisualMap
visual_text_color='#000'
)
四、图表类型
1,Bar(柱状图/条形图)
⽰例1:
from pyecharts import Bar
attr =["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"]
v1 =[20, 40, 60, 80, 100, 120]
v2 =[10, 20, 30, 40, 120, 80]
bar =Bar("标记线和标记点⽰例")
bar.add("商家A", attr, v1, mark_point=["average"])
bar.add("商家B", attr, v2, mark_line=["min", "max"])
效果:
⽰例2:
from pyecharts import Bar
attr =["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"]
v1 =[20, 40, 60, 80, 100, 120]
v2 =[10, 20, 30, 40, 120, 80]
bar =Bar("x 轴和 y 轴交换")
bar.add("商家A", attr, v1)
bar.add("商家B", attr, v2, is_convert=True)
效果:
2,EffectScatter(带有涟漪特效动画的散点图)
⽰例1动态散点图:
from pyecharts import EffectScatter
v1 =[10, 20, 30, 40, 50, 60]
v2 =[25, 20, 15, 10, 60, 33]
es =EffectScatter("动态散点图⽰例")
es.add("effectScatter", v1, v2)
效果:
⽰例2动态图形散点图:
from pyecharts import EffectScatter
es =EffectScatter("动态散点图各种图形⽰例")
es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin")
es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect")
es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect")
es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond")
es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow")
es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle")
效果:
3,Funnel(漏⽃图)
⽰例:
from pyecharts import Funnel
attr =["衬衫", "⽺⽑衫", "雪纺衫", "裤⼦", "⾼跟鞋", "袜⼦"]
value =[20, 40, 60, 80, 100, 120]
funnel =Funnel("漏⽃图⽰例")
funnel.add("商品", attr, value, is_label_show=True, label_pos="inside", label_text_color="#fff")
效果:
4,Gauge(仪表盘)
⽰例:
from pyecharts import Gauge
gauge =Gauge("仪表盘⽰例")
gauge.add("业务指标", "完成率", 66.66)
gauge.show_config()
效果:
5,Geo(地理坐标系)
⽰例1
from pyecharts import Geo
data=[("海门",9),("西安",12),("招远",12),("⾈⼭",12),("齐齐哈尔",14),("盐城",15),("⾚峰",16),("青岛",18),("乳⼭",18),("⾦昌",19),("泉州",21),("莱西",21), ("⽇照",21), ("胶南",22),("南通",23),("拉萨",24),("云浮",24),("梅州",25)]
geo=Geo("全国主要城市空⽓质量","data from pm2.5",title_color="#fff",title_pos="center",width=1200,height=600,background_color='#404a59')
attr,value=geo.cast(data)
geo.add("",attr,value,visual_range=[0,200],visual_text_color="#fff",symbol_size=15,is_visualmap=True)
geo.show_config()
效果:
⽰例2: