用python实现各种图表的制作方法_用pyecharts制作精美图表,python进行数据可视化...

提到用python进行数据可视化,那么大多数人选择都是matplotlib,但是生成的图表不能进行交互操作,比如时间轴拖动、交互式图例等,那么本文将对pyecharts进行详细讲解。

目前pyecharts已经更新到1.x版本,而1.x版本与0.5.x版本在构图语法上有很大的不一样,1.x的版本语法更靠近Echarts,但是方便理解的还是0.5.x版本,所以本文基于pyecharts 0.5.11版本进行讲解。大部分示例来自官方文档,并添加注释。建议打开jupyter notebook边敲边学。

可以使用pip install pyecharts==0.5.11 的方式来安装。

那么在详解讲解各个图表怎样绘制之前,先讲一下pyecharts绘制的基本步骤(套路)⬇️

柱状图和条形图

直接看代码就行,所有内容会在代码里面注释

is_stack 实现数据堆叠

from pyecharts import Bar #导入bar模块

attr = ["皮鞋", "休闲鞋", "帆布鞋", "运动鞋", "高跟鞋", "豆豆鞋"] #设置x轴数据

v1 = [260, 180, 56, 210, 169, 100] #第一组数据

v2 = [209, 160, 59, 188, 172, 99] #第二组数据

bar = Bar("柱状图数据堆叠示例") #实例一个柱状图

bar.add("商家A", attr, v1, is_stack=True) #用add函数往图里添加数据并设置堆叠

bar.add("商家B", attr, v2, is_stack=True)

bar.render() #展示数据

bar

使用标记点和标记线

from pyecharts import Bar #导入bar模块

bar = Bar("标记线和标记点示例") #实例一个柱状图

bar.add("商家A", attr, v1, mark_point=["average"]) #用add函数往图里添加数据并设置堆叠

bar.add("商家B", attr, v2, mark_line=["min","max"])

bar.render() #展示数据

bar

is_convert 交换 XY 轴

from pyecharts import Bar

bar = Bar("x 轴和 y 轴交换")

bar.add("商家A", attr, v1)

bar.add("商家B", attr, v2, is_convert=True)

#设置交换XY轴

bar.render()

bar

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)

#设置datazoom

bar.render()

bar

多 dataZoom 效果,效果同时支持 X、Y 轴

days = ["{}天".format(i) for i in range(30)]

days_v1 = [random.randint(1, 30) for _ in range(30)]

bar = Bar("Bar - datazoom - xaxis/yaxis 示例")

bar.add(

"",

days,

days_v1,

# 默认为 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,

)

bar.render()

bar

3D柱状图

设置 grid3d_shading 可以让柱状更真实

from pyecharts import Bar3D

bar3d = Bar3D("3D 柱状图示例", width=1200, height=600)

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(

"3D柱状图",

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 = data,

is_visualmap=True,

visual_range=[0, 20],

visual_range_color=range_color,

grid3d_width=200,

grid3d_depth=80,

grid3d_shading="lambert",

)

bar3d.render()

bar3d

漏斗图

from pyecharts import Funnel #导入漏斗图

attr = ["皮鞋", "休闲鞋", "帆布鞋", "运动鞋", "高跟鞋", "豆豆鞋"] #设置x轴数据

value = [260, 180, 56, 210, 169, 100] #数据

funnel = Funnel("漏斗图示例")

funnel.add(

"商品",

attr,

value,

is_label_show=True, #显示标签

label_pos="inside", #标签位置

label_text_color="#fff", #颜色

)

funnel.render()

funnel

标签显示在外部

from pyecharts import Funnel #导入漏斗图

attr = ["皮鞋", "休闲鞋", "帆布鞋", "运动鞋", "高跟鞋", "豆豆鞋"] #设置x轴数据

value = [260, 180, 56, 210, 169, 100] #数据

funnel = Funnel("漏斗图示例",width=600, height=400, title_pos='center')

funnel.add(

"商品",

attr,

value,

is_label_show=True, #显示标签

label_pos="outside", #标签位置

legend_orient="vertical",

legend_pos="left",

label_text_color="#fff", #颜色

)

funnel.render()

funnel

仪表盘

from pyecharts import Gauge #和之前一样 ,导入相关绘图包

gauge = Gauge("仪表盘示例") #标题

gauge.add("业务指标", "完成率", 89.46) #数据

gauge.render()

gauge

折线图

from pyecharts import Line #导入相关折线图

attr = ["皮鞋", "休闲鞋", "帆布鞋", "运动鞋", "高跟鞋", "豆豆鞋"] #设置x轴数据

v1 = [260, 180, 56, 210, 169, 100] #第一组数据

v2 = [209, 160, 59, 188, 172, 99] #第二组数据

line = Line("折线图示例") #创建一个实例

line.add("商家A", attr, v1, mark_point=["average"]) #添加数据和标记点

line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"])

line.render()

line

使用 area_opacity绘制面积图

line = Line("折线图-面积图示例")

line.add(

"商家A",

attr,

v1,

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.render()

line

3D折线图

from pyecharts import Line3D

import math

_data = []

for t in range(0, 25000):

_t = t / 1000

x = (1 + 0.25 * math.cos(75 * _t)) * math.cos(_t)

y = (1 + 0.25 * math.cos(75 * _t)) * math.sin(_t)

z = _t + 2.0 * math.sin(75 * _t)

_data.append([x, y, z])

range_color = [

'#313695', '#4575b4', '#74add1', '#abd9e9', '#e0f3f8', '#ffffbf',

'#fee090', '#fdae61', '#f46d43', '#d73027', '#a50026']

line3d = Line3D("3D 折线图示例", width=1200, height=600)

line3d.add(

"",

_data,

is_visualmap=True,

visual_range_color=range_color,

visual_range=[0, 30],

is_grid3d_rotate=True,

grid3d_rotate_speed=180,

)

line3d.render()

line3d

这个是一个动态的图片

饼图:饼图主要表现不同类目的数据在总和中占比。每个的弧度表示数据数量的比例。

from pyecharts import Pie

pie = Pie("饼图示例")

# attr和v1是前面声明的

pie.add("", attr, v1, is_label_show=True) #显示标签

pie.render()

pie

环形饼状图

pie = Pie("饼图-圆环图示例", title_pos='center') #创建饼图

pie.add(

"",

attr,

v1,

radius=[40, 75], #设置两个环大小

label_text_color=None,

is_label_show=True,

legend_orient="vertical",#垂直显示图例

legend_pos="left",#图例放在左边

)

pie.render()

pie

玫瑰饼状图

pie = Pie("饼图-玫瑰图示例", title_pos='center', width=900)

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.render()

pie

地图

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,

visual_text_color="#000",

)

map.render()

map

分省地图:

from pyecharts import Map

value = [20, 190, 253, 77, 65]

attr = ['汕头市', '汕尾市', '揭阳市', '阳江市', '肇庆市']

map = Map("广东地图示例", width=1200, height=600)

map.add(

"", attr, value, maptype="广东", is_visualmap=True, visual_text_color="#000"

) #设置广东省

map.render()

map

世界地图

value = [95.1, 23.2, 43.3, 66.4, 88.5]

attr= ["China", "Canada", "Brazil", "Russia", "United States"]

map = Map("世界地图示例", width=1200, height=600)

map.add(

"",

attr,

value,

maptype="world", #设置世界地图

is_visualmap=True,

visual_text_color="#000",

)

map.render()

map

词云图

from pyecharts import WordCloud

name = [

'Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications',

'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp',

'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham',

'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break']

value = [

10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112,

965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265]

wordcloud = WordCloud(width=1300, height=620)

wordcloud.add("", name, value, word_size_range=[20, 100]) #设置大小

wordcloud.render()

wordcloud

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值