Python绘表(一)基于Pyecharts绘制图表
一、pyecharts简介
pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。
pyecharts种类 | 简介 |
---|---|
Bar | (柱状图/条形图) |
Bar3D | (3D 柱状图) |
Boxplot | (箱形图) |
EffectScatter | (带有涟漪特效动画的散点图) |
Funnel | (漏斗图) |
Gauge | (仪表盘) |
Geo | (地理坐标系) |
Graph | (关系图) |
HeatMap | (热力图) |
Kline | (K线图) |
Line | (折线/面积图) |
Line3D | (3D 折线图) |
Liquid | (水球图) |
Map | (地图) |
Parallel | (平行坐标系) |
Pie | (饼图) |
Polar | (极坐标系) |
Radar | (雷达图) |
Sankey | (桑基图) |
Scatter | (散点图) |
Scatter3D | (3D 散点图) |
ThemeRiver | (主题河流图) |
WordCloud | (词云图) |
- 安装pyecharts
pip install pyecharts
二、应用举例
1 简单图表
- 新建echarts01:
- 运行完后按
F5
刷新页面,或者到File目录下refresh
,会在同目录下看到图表.html
生成
# encoding: utf-8
import time
from pyecharts import Bar
bar = Bar("我的第一个图表", "这里是副标题")
bar.add("服装", ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"],
[5, 20, 36, 10, 75, 90], is_more_utils=True)
bar.show_config()
bar.render()
2柱状图
from pyecharts import Bar
attr = ['{}月'.format(i) for i in range(1, 13)]
v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.8, 48.7, 18.8, 6.0, 2.3]
bar = Bar("柱状图示例")
bar.add("蒸发量", attr, v1, mark_line=['average'],
mark_point=["max", "min"]) # 画平均线,标记最大最小值
bar.add("降水量", attr, v2, mark_line=['average'], mark_point=["max", "min"])
bar.render()
from pyecharts import Bar
attr = ['{}月'.format(i) for i in range(1, 13)]
v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3]
v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.8, 48.7, 18.8, 6.0, 2.3]
bar = Bar("x 轴和 y 轴交换") # print交换x轴和y轴
bar.add("蒸发量", attr, v1, mark_line=['average'], mark_point=["max", "min"])
bar.add("降水量", attr, v2, mark_line=['average'], mark_point=[
"max", "min"], is_convert=True) # is_convert是否转换
bar.render()
from pyecharts import Bar
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 75, 90]
v2 = [10, 25, 10, 60, 20, 80]
bar = Bar('柱状图数据堆叠示例')
bar.add('商家A', attr, v1, mark_point=['average'], is_stack=True)
bar.add('商家B', attr, v2, mark_line=['max', 'min'], is_stack=True)
bar.show_config()
bar.render()
3 饼图
from pyecharts import Pie
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 100]
pie = Pie('饼状示意图')
pie.add('', attr, v1, is_label_show=True)
pie.render()
from pyecharts import Pie
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [11, 12, 13, 10, 10, 10]
v2 = [19, 21, 32, 20, 20, 33]
# 标题,title_pos调整标题位置,title_text_size调整主标题文字大小
pie = Pie("饼图实例2-玫瑰图示例", title_pos='center', width=900, title_text_size=40)
pie.add("商品A", attr, v1, center=[25, 50], is_random=True, radius=[
30, 75], rosetype='radius')
pie.add("商品B", attr, v2, center=[75, 50], is_random=True, radius=[
30, 75], rosetype='area', is_legend_show=False, is_label_show=True)
pie.show_config()
pie.render()
from pyecharts import Pie
pie = Pie('各类电影中"好片"所占的比例', "数据来着豆瓣", title_pos='center')
pie.add("", ["剧情", ""], [25, 75], center=[10, 30], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None, )
pie.add("", ["奇幻", ""], [24, 76], center=[30, 30], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None, legend_pos='left')
pie.add("", ["爱情", ""], [14, 86], center=[50, 30], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["惊悚", ""], [11, 89], center=[70, 30], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["冒险", ""], [27, 73], center=[90, 30], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["动作", ""], [15, 85], center=[10, 70], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["喜剧", ""], [54, 46], center=[30, 70], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["科幻", ""], [26, 74], center=[50, 70], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["悬疑", ""], [25, 75], center=[70, 70], radius=[18, 24],
label_pos='center', is_label_show=True, label_text_color=None)
pie.add("", ["犯罪", ""], [28, 72], center=[90, 70], radius=[18, 24], label_pos='center',
is_label_show=True, label_text_color=None, is_legend_show=True, legend_top="center")
pie.show_config()
pie.render()
4 仪表盘图
from pyecharts import Gauge
gauge = Gauge('今日加班概率')
gauge.add('', "可能性", 99.99, angle_range=[225, -45],
scale_range=[0, 100], is_legend_show=False)
gauge.render()
gauge
5 散点图
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()
from pyecharts import Scatter
scatter = Scatter('散点图')
v1, v2 = scatter.draw('cungudafa.png')
scatter.add('test1', v1, v2, is_random=True)
scatter.render()
6 词云
from pyecharts import WordCloud
name = [u'网络', u'数据分析.txt', u'hadoop', u'flask']
value = [10000, 6000, 4000, 3000]
wd = WordCloud(width=1300, height=620)
wd.add('', name, value, word_size_range=(20, 100))
wd.render()
7 水球图
from pyecharts import Liquid
liquid = Liquid("水球图示例")
liquid.add("Liquid", [0.6, 0.5, 0.4, 0.3], is_liquid_outline_show=False)
liquid.show_config()
liquid.render()
8 地图
按步骤安装中国城市地图插件
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
from pyecharts import Map
value = [120, 110, 130]
attr = ['河南', '山西', '辽宁']
map = Map('Map 结合 VisualMap 实例', width=800, height=400)
map.add('', attr, value, maptype='china',
is_visualmap=True, visual_text_color='#000')
map.render()
复杂版本:
9 折线图
from pyecharts import Line, Grid
import random
attr = ["{}天".format(i) for i in range(1, 31)]
line_top = Line("折线图示例")
line_top.add(
"最高气温",
attr,
[random.randint(20, 100) for i in range(30)],
mark_point=["max", "min"],
mark_line=["average"],
legend_pos="38%",
)
line_bottom = Line()
line_bottom.add(
"最低气温",
attr,
[random.randint(20, 100) for i in range(30)],
mark_point=["max", "min"],
mark_line=["average"],
is_yaxis_inverse=True,
xaxis_pos="top",
)
grid = Grid(width=1200, height=700)
grid.add(line_top, grid_bottom="60%")
grid.add(line_bottom, grid_top="50%")
grid.render()
10 面积图
from pyecharts import Line
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
v1 = [5, 20, 36, 10, 10, 100]
v2 = [55, 60, 16, 20, 15, 80]
line = Line("折线图-面积图示例")
line.add("商家A", attr, v1, is_fill=True,
line_opacity=0.2, area_opacity=0.4, symbol=None)
line.add("商家B", attr, v2, is_fill=True, area_color='#000',
area_opacity=0.3, is_smooth=True)
line.show_config()
line.render()
11 3D立体图
from pyecharts import Bar3D
bar3d = Bar3D("3D 柱状图示例", width=1200, height=600)
x_axis = [
"12a", "1a", "2a", "3a", "4a", "5a", "6a", "7a", "8a", "9a", "10a", "11a",
"12p", "1p", "2p", "3p", "4p", "5p", "6p", "7p", "8p", "9p", "10p", "11p"
]
y_axis = [
"Saturday", "Friday", "Thursday", "Wednesday", "Tuesday", "Monday", "Sunday"
]
data = [
[0, 0, 5], [0, 1, 1], [0, 2, 0], [0, 3, 0], [0, 4, 0], [0, 5, 0],
[0, 6, 0], [0, 7, 0], [0, 8, 0], [0, 9, 0], [0, 10, 0], [0, 11, 2],
[0, 12, 4], [0, 13, 1], [0, 14, 1], [0, 15, 3], [0, 16, 4], [0, 17, 6],
[0, 18, 4], [0, 19, 4], [0, 20, 3], [0, 21, 3], [0, 22, 2], [0, 23, 5],
[1, 0, 7], [1, 1, 0], [1, 2, 0], [1, 3, 0], [1, 4, 0], [1, 5, 0],
[1, 6, 0], [1, 7, 0], [1, 8, 0], [1, 9, 0], [1, 10, 5], [1, 11, 2],
[1, 12, 2], [1, 13, 6], [1, 14, 9], [1, 15, 11], [1, 16, 6], [1, 17, 7],
[1, 18, 8], [1, 19, 12], [1, 20, 5], [1, 21, 5], [1, 22, 7], [1, 23, 2],
[2, 0, 1], [2, 1, 1], [2, 2, 0], [2, 3, 0], [2, 4, 0], [2, 5, 0],
[2, 6, 0], [2, 7, 0], [2, 8, 0], [2, 9, 0], [2, 10, 3], [2, 11, 2],
[2, 12, 1], [2, 13, 9], [2, 14, 8], [2, 15, 10], [2, 16, 6], [2, 17, 5],
[2, 18, 5], [2, 19, 5], [2, 20, 7], [2, 21, 4], [2, 22, 2], [2, 23, 4],
[3, 0, 7], [3, 1, 3], [3, 2, 0], [3, 3, 0], [3, 4, 0], [3, 5, 0],
[3, 6, 0], [3, 7, 0], [3, 8, 1], [3, 9, 0], [3, 10, 5], [3, 11, 4],
[3, 12, 7], [3, 13, 14], [3, 14, 13], [3, 15, 12], [3, 16, 9], [3, 17, 5],
[3, 18, 5], [3, 19, 10], [3, 20, 6], [3, 21, 4], [3, 22, 4], [3, 23, 1],
[4, 0, 1], [4, 1, 3], [4, 2, 0], [4, 3, 0], [4, 4, 0], [4, 5, 1],
[4, 6, 0], [4, 7, 0], [4, 8, 0], [4, 9, 2], [4, 10, 4], [4, 11, 4],
[4, 12, 2], [4, 13, 4], [4, 14, 4], [4, 15, 14], [4, 16, 12], [4, 17, 1],
[4, 18, 8], [4, 19, 5], [4, 20, 3], [4, 21, 7], [4, 22, 3], [4, 23, 0],
[5, 0, 2], [5, 1, 1], [5, 2, 0], [5, 3, 3], [5, 4, 0], [5, 5, 0],
[5, 6, 0], [5, 7, 0], [5, 8, 2], [5, 9, 0], [5, 10, 4], [5, 11, 1],
[5, 12, 5], [5, 13, 10], [5, 14, 5], [5, 15, 7], [5, 16, 11], [5, 17, 6],
[5, 18, 0], [5, 19, 5], [5, 20, 3], [5, 21, 4], [5, 22, 2], [5, 23, 0],
[6, 0, 1], [6, 1, 0], [6, 2, 0], [6, 3, 0], [6, 4, 0], [6, 5, 0],
[6, 6, 0], [6, 7, 0], [6, 8, 0], [6, 9, 0], [6, 10, 1], [6, 11, 0],
[6, 12, 2], [6, 13, 1], [6, 14, 3], [6, 15, 4], [6, 16, 0], [6, 17, 0],
[6, 18, 0], [6, 19, 0], [6, 20, 1], [6, 21, 2], [6, 22, 2], [6, 23, 6]
]
range_color = ['#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',
'#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']
bar3d.add(
"",
x_axis,
y_axis,
[[d[1], d[0], d[2]] for d in data],
is_visualmap=True,
visual_range=[0, 20],
visual_range_color=range_color,
grid3d_width=200,
grid3d_depth=80,
is_grid3d_rotate=True, # 自动旋转
grid3d_rotate_speed=180, # 旋转速度
)
bar3d.render()
12 时间表
from pyecharts import Pie, Timeline
import random
attr = ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
pie_1 = Pie("2012 年销量比例", "数据纯属虚构")
pie_1.add("秋季", attr, [random.randint(10, 100) for _ in range(6)],
is_label_show=True, radius=[30, 55], rosetype='radius')
pie_2 = Pie("2013 年销量比例", "数据纯属虚构")
pie_2.add("秋季", attr, [random.randint(10, 100) for _ in range(6)],
is_label_show=True, radius=[30, 55], rosetype='radius')
pie_3 = Pie("2014 年销量比例", "数据纯属虚构")
pie_3.add("秋季", attr, [random.randint(10, 100) for _ in range(6)],
is_label_show=True, radius=[30, 55], rosetype='radius')
pie_4 = Pie("2015 年销量比例", "数据纯属虚构")
pie_4.add("秋季", attr, [random.randint(10, 100) for _ in range(6)],
is_label_show=True, radius=[30, 55], rosetype='radius')
pie_5 = Pie("2016 年销量比例", "数据纯属虚构")
pie_5.add("秋季", attr, [random.randint(10, 100) for _ in range(6)],
is_label_show=True, radius=[30, 55], rosetype='radius')
timeline = Timeline(is_auto_play=True, timeline_bottom=0)
timeline.add(pie_1, '2012 年')
timeline.add(pie_2, '2013 年')
timeline.add(pie_3, '2014 年')
timeline.add(pie_4, '2015 年')
timeline.add(pie_5, '2016 年')
timeline.render()
这里推荐几个参考学习文档:
1、可视化神器Pyecharts,这份最全教程请收好!
2、pyecharts介绍