阅读指南
通用配置项
xyAxis:直角坐标系中的 x、y 轴(Line、Bar、Scatter、EffectScatter、Kline)
dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline)
legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)
图表详细
Bar(柱状图/条形图)
EffectScatter(带有涟漪特效动画的散点图)
Funnel(漏斗图)
Gauge(仪表盘)
Geo(地理坐标系)
Graph(关系图)
HeatMap(热力图)
Kline(K线图)
Line(折线/面积图)
Liquid(水球图)
Map(地图)
Parallel(平行坐标系)
Pie(饼图)
Polar(极坐标系)
Radar(雷达图)
Scatter(散点图)
WordCloud(词云图)
项目概况
pyecharts 是一个用于生成 Echarts 图表的类库。实际上就是 Echarts 与 Python 的对接。
Echarts 是百度开源的一个数据可视化 JS 库。看了官方的介绍文档,觉得很不错,就想看看有没有人实现了 Python 库可以直接调用的。Github 上找到了一个 echarts-python 不过这个项目已经很久没更新且也没什么介绍文档。借鉴了该项目,就自己动手实现一个,于是就有了 pyecharts。API 接口是从另外一个图表库 pygal 中模仿的。
如何安装
pyecharts 兼容 Python2 和 Python3。当前版本为 0.1.6,关于版本信息请查看 changelog.md
pip install pyecharts
开始使用
首先开始来绘制你的第一个图表
from pyecharts import Bar
bar = Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"], [5, 20, 36, 10, 75, 90])
bar.show_config()
bar.render()
Tip: 可以按右边的下载按钮将图片下载到本地
add()
主要方法,用于添加图表的数据和设置各种配置项
show_config()
打印输出图表的所有配置项
render()
默认将会在根目录下生成一个 render.html 的文件,支持 path 参数,设置文件保存位置,如 render(r"e:\my_first_chart.html"),文件用浏览器打开。
默认的编码类型为 UTF-8,在 Python3 中是没什么问题的,Python3 对中文的支持好很多。但是在 Python2 中,编码的处理是个很头疼的问题,暂时没能找到完美的解决方法,目前只能通过文本编辑器自己进行二次编码,我用的是 Visual Studio Code,先通过 Gbk 编码重新打开,然后再用 UTF-8 重新保存,这样用浏览器打开的话就不会出现中文乱码问题了。
基本上所有的图表类型都是这样绘制的:
chart_name = Type() 初始化具体类型图表。
add() 添加数据及配置项。
render() 生成 .html 文件。
add() 数据一般为两个列表(长度一致),如果你的数据是字典或者是带元组的字典。可利用 cast() 方法转换。
@staticmethod
cast(seq)
``` 转换数据序列,将带字典和元组类型的序列转换为 k_lst,v_lst 两个列表 ```
元组列表
[(A1, B1), (A2, B2), (A3, B3), (A4, B4)] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ]
字典列表
[{A1: B1}, {A2: B2}, {A3: B3}, {A4: B4}] --> k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ]
字典
{A1: B1, A2: B2, A3: B3, A4: B4} -- > k_lst[ A[i1, i2...] ], v_lst[ B[i1, i2...] ]
图表类初始化所接受的参数(所有类型的图表都一样)。
title -> str
主标题文本,支持 \n 换行,默认为 ""
subtitle -> str
副标题文本,支持 \n 换行,默认为 ""
width -> int
画布宽度,默认为 800(px)
height -> int
画布高度,默认为 400(px)
title_pos -> str
标题位置,默认为 auto,有'auto', 'left', 'right', 'center'可选
title_color -> str
主标题文本颜色,默认为 '#000'
subtitle_color -> str
副标题文本颜色,默认为 '#aaa'
title_text_size -> int
主标题文本字体大小,默认为 18
subtitle_text_size -> int
副标题文本字体大小,默认为 12
background_color -> str
画布背景颜色,默认为 '#fff'
通用配置项
通用配置项均在 add() 中设置
xyAxis:直角坐标系中的 x、y 轴(Line、Bar、Scatter、EffectScatter、Kline)
is_convert -> bool
是否交换 x 轴与 y 轴
xy_text_size -> int
x 轴和 y 轴字体大小
namegap -> int
坐标轴名称与轴线之间的距离
x_axis -> list
x 轴数据项
xaxis_name -> str
x 轴名称
xaxis_name_pos -> str
x 轴名称位置,有'start','middle','end'可选
y_axis -> list
y 坐标轴数据
yaxis_formatter -> str
y 轴标签格式器,如 '天',则 y 轴的标签为数据加'天'(3 天,4 天),默认为 ""
yaxis_name -> str
y 轴名称
yaxis_name_pos -> str
y 轴名称位置,有'start', 'middle','end'可选
interval -> int
坐标轴刻度标签的显示间隔,在类目轴中有效。默认会采用标签不重叠的策略间隔显示标签
设置成 0 强制显示所有标签
设置为 1,表示『隔一个标签显示一个标签』,如果值为 2,表示隔两个标签显示一个标签,以此推
dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline)
is_datazoom_show -> bool
是否使用区域缩放组件,默认为 False
datazoom_type -> str
区域缩放组件类型,默认为'slider',有'slider', 'inside'可选
datazoom_range -> list
区域缩放的范围,默认为[50, 100]
legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。
is_legend_show -> bool
是否显示顶端图例,默认为 True
legend_orient -> str
图例列表的布局朝向,默认为'horizontal',有'horizontal', 'vertical'可选
legend_pos -> str
图例组件离容器左侧的距离,默认为'center',有'left', 'center', 'right'可选
legend_top -> str
图例组件离容器上侧的距离,默认为'top',有'top', 'center', 'bottom'可选
label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。
is_label_show -> bool
是否正常显示标签,默认不显示。标签即各点的数据项信息
is_emphasis -> bool
是否高亮显示标签,默认显示。高亮标签即选中数据时显示的信息项。
label_pos -> str
标签的位置,Bar 图默认为'top'。有'top', 'left', 'right', 'bottom', 'inside','outside'可选
label_text_color -> str
标签字体颜色,默认为 "#000"
label_text_size -> int
标签字体大小,默认为 12
is_random -> bool
是否随机排列颜色列表,默认为 False
label_color -> list
自定义标签颜色。全局颜色列表,所有图表的图例颜色均在这里修改。如 Bar 的柱状颜色,Line 的线条颜色等等。
formatter -> list
标签内容格式器,有'series', 'name', 'value', 'percent'可选。如 ["name", "value"]
series:图例名称
name:数据项名称
value:数据项值
percent:数据的百分比(主要用于饼图)
Tip: is_random 可随机打乱图例颜色列表,算是切换风格?
lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)
line_width -> int
线的宽度,默认为 1
line_opacity -> float
线的透明度,0 为完全透明,1 为完全不透明。默认为 1
line_curve -> float
线的弯曲程度,0 为完全不弯曲,1 为最弯曲。默认为 0
line_type -> str
线的类型,有'solid', 'dashed', 'dotted'可选。默认为'solid'
图表详细
Bar(柱状图/条形图)
柱状/条形图,通过柱形的高度/条形的宽度来表现数据的大小。
Bar.add() 方法签名
add(name, x_axis, y_axis, is_stack=False, **kwargs)
name -> str
图例名称
x_axis -> list
x 坐标轴数据
y_axis -> list
y 坐标轴数据
is_stack -> bool
数据堆叠,同个类目轴上系列配置相同的 stack 值可以堆叠放置
from pyecharts import Bar
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 8, 60, 20, 80]
bar = Bar("柱状图数据堆叠示例")
bar.add("商家A", attr, v1, is_stack=True)
bar.add("商家B", attr, v2, is_stack=True)
bar.render()
Tip: 全局配置项要在最后一个 add() 上设置,否侧设置会被冲刷掉。
from pyecharts import Bar
bar = Bar("标记线和标记点示例")
bar.add("商家A", attr, v1, mark_point=["average"])
bar.add("商家B", attr, v2, mark_line=["min", "max"])
bar.render()
mark_point -> list
标记点,有'min', 'max', 'average'可选
mark_line -> list
标记线,有'min', 'max', 'average'可选
mark_point_symbol -> str
标记点图形,,默认为'pin',有'circle', 'rect', 'roundRect', 'triangle', 'diamond', 'pin', 'arrow'可选
mark_point_symbolsize -> int
标记点图形大小,默认为 50
mark_point_textcolor -> str
标记点字体颜色,默认为'#fff'
from pyecharts import Bar
bar = Bar("x 轴和 y 轴交换")
bar.add("商家A", attr, v1)
bar.add("商家B", attr, v2, is_convert=True)
bar.render()
dataZoom 效果,'slider' 类型
import random
attr = ["{}天".format(i) for i in range(30)]
v1 = [random.randint(1, 30) for _ in range(30)]
bar = Bar("Bar - datazoom - slider 示例")
bar.add("", attr, v1, is_label_show=True, is_datazoom_show=True)
bar.show_config()
bar.render()
'inside' 类型
attr = ["{}天".format(i) for i in range(30)]
v1 = [random.randint(1, 30) for _ in range(30)]
bar = Bar("Bar - datazoom - inside 示例")
bar.add("", attr, v1, is_datazoom_show=True, datazoom_type='inside', datazoom_range=[10, 25])
bar.show_config()
bar.render()
Tip: datazoom 适合所有平面直角坐标系图形,也就是(Line、Bar、Scatter、EffectScatter、Kline)
Tip: 可以通过 label_color 来设置柱状的颜色,如 ['#eee', '#000'],所有的图表类型的图例颜色都可通过 label_color 来修改。
EffectScatter(带有涟漪特效动画的散点图)
利用动画特效可以将某些想要突出的数据进行视觉突出。
EffectScatter.add() 方法签名
add(name, x_value, y_value, symbol_size=10, **kwargs)
name -> str
图例名称
x_axis -> list
x 坐标轴数据
y_axis -> list
y 坐标轴数据
symbol_size -> int
标记图形大小,默认为 10
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)
es.render()
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")
es.render()