目录
- 一、概念
- 二、安装和导入
- 三、绘图逻辑
- 四、绘图
- 1、柱状图
- 2、折线图
- 3、散点图
- 4、饼图
- 5、南丁格尔图
- 6、Geo() 地理坐标第
- 7、Map() 绘制区域
- 8、词云图
- 9、层叠图
- 10、3D 图
- 11、仪表板
一、概念
Pyecharts 是一个基于 Echarts 的 Python 可视化库,它通过 Python 生成 Echarts 的图表,并支持多种常见的图表类型,如折线图、柱状图、散点图、饼图等。
官网地址:https://pyecharts.org/#/zh-cn/intro
二、安装和导入
pip install pyecharts
from pyecharts.charts import * # 从 pyecharts.charts 模块中导入所有类
三、绘图逻辑
1、选择图表类型
2、声明图形类
3、选择全局变量
4、显示及保存图表
四、绘图
1、柱状图
from pyecharts.charts import Bar # 从 pyecharts.charts 模块中导入 Bar 类
# 定义月份和对应的消费金额数据
months = ['一月', '二月', '三月', '四月', '五月', '六月']
cost = [1200, 1500, 1800, 1400, 1600, 2000]
# 创建一个 Bar 对象
bar = (
Bar() # 调用 Bar 类的构造函数
.add_xaxis(months) # 添加 x 轴的数据,即月份
.add_yaxis('消费金额', cost) # 添加 y 轴的数据,即消费金额,'消费金额' 为系列的名称
)
# 将图表保存为 HTML 文件,路径为 './bar.html'
bar.render('./bar.html')
2、折线图
# 从 pyecharts.charts 模块中导入 Line 类
from pyecharts.charts import Line
# 定义一周的日期和对应的温度、湿度数据
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
temperatures = [28, 29, 30, 32, 31, 30, 29]
humidity = [40, 50, 70, 65, 45, 55]
# 创建一个 Line 对象
line = (
Line() # 调用 Line 类的构造函数
.add_xaxis(days) # 添加 x 轴的数据,即日期
.add_yaxis('折线图1', temperatures) # 添加第一条 y 轴的数据,即温度,'折线图1' 为系列的名称
.add_yaxis('折线图2', humidity) # 添加第二条 y 轴的数据,即湿度,'折线图2' 为系列的名称
)
# 将图表保存为 HTML 文件,路径为 './line.html'
line.render('./line.html')
3、散点图
from pyecharts.charts import Scatter # 从 pyecharts.charts 模块中导入 Scatter 类
# 定义一周的日期和对应的温度、湿度数据
cities = ['北京', '上海', '广州', '深圳', '成都', '重庆']
days = ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
temperatures = [32, 33, 30, 31, 28, 30]
humidity = [40, 50, 70, 65, 45, 55]
# 创建一个 Scatter 对象
scatter = (
Scatter() # 调用 Scatter 类的构造函数
.add_xaxis(days) # 添加 x 轴的数据,即日期
.add_yaxis('温度', temperatures) # 添加第一条 y 轴的数据,即温度,'温度' 为系列的名称
.add_yaxis('湿度', humidity) # 添加第二条 y 轴的数据,即湿度,'湿度' 为系列的名称
)
# 将图表保存为 HTML 文件,路径为 './scatter.html'
scatter.render('./scatter.html')
4、饼图
from pyecharts.charts import Pie # 从 pyecharts.charts 模块中导入 Pie 类
# 定义水果和对应的销量数据
fruits = ['苹果', '香蕉', '橙子', '草莓', '葡萄']
sales = [45, 30, 25, 20, 15]
# 将水果和销量数据组合成一个列表
data = [list(z) for z in zip(fruits, sales)]
# 创建一个 Pie 对象
pie = (
Pie() # 调用 Pie 类的构造函数
.add( # 添加数据
series_name='水果销量', # 设置系列的名称
data_pair=data, # 设置数据对,包含水果和对应的销量
)
)
# 将图表保存为 HTML 文件,路径为 './pie.html'
pie.render('./pie.html')
5、南丁格尔图
from pyecharts.charts import Pie # 从 pyecharts.charts 模块中导入 Pie 类
from pyecharts import options as opts # 从 pyecharts.options 模块中导入 opts 类
# 定义水果和对应的销量数据
fruits = ['苹果', '香蕉', '橙子', '草莓', '葡萄']
sales = [45, 30, 25, 20, 15]
# 将水果和销量数据组合成一个列表
data = [list(z) for z in zip(fruits, sales)]
# 创建一个 Pie 对象,并设置半径、标签格式和玫瑰图样式
pie2 = (
Pie() # 调用 Pie 类的构造函数
.add( # 添加数据
series_name='水果销量', # 设置系列的名称
data_pair=data, # 设置数据对,包含水果和对应的销量
radius=['40%', '60%'], # 设置饼图的半径范围
label_opts=opts.LabelOpts(formatter="{b}:{d}%"), # 设置标签的格式,显示水果名称和销量占比
rosetype="radius" # 设置玫瑰图样式,即设置为半径模式
)
)
# 将图表保存为 HTML 文件,路径为 './pie_radius.html'
pie2.render('./pie2.html')
6、Geo() 地理坐标第
from pyecharts.charts import Geo # 从 pyecharts.charts 模块中导入 Geo 类
from pyecharts import options as opts # 从 pyecharts.options 模块中导入 opts 类
import random # 导入 random 模块
# 定义省份数据,以及每个省份的随机数据(模拟数据)
province = [
'广东', '湖北', '湖南', '四川', '重庆', '黑龙江',
'浙江', '山西', '河北', '安徽', '河南', '山东', '西藏'
]
data = [(i, random.randint(50, 150)) for i in province]
# 创建一个 Geo 对象,并设置地图类型为 "china"
geo = (
Geo() # 调用 Geo 类的构造函数
.add_schema(maptype="china") # 设置地图类型为中国地图
.add("", data) # 添加数据,data 中包含省份和对应的随机数据
.set_series_opts(label_opts=opts.LabelOpts(is_show=True)) # 设置系列的标签选项,显示省份名称
.set_global_opts(
visualmap_opts=opts.VisualMapOpts( # 设置全局的视觉映射选项
is_piecewise=True, # 设置为分段型视觉映射
pieces=[
{'min': 50, 'max': 100, 'label': '50-100'}, # 视觉映射的分段设置
{'min': 100, 'max': 150, 'label': '100-150'}
]
)
)
)
# 将图表保存为 HTML 文件,路径为 './geo.html'
geo.render('./geo.html')
7、Map() 绘制区域
from pyecharts.charts import Map # 从 pyecharts.charts 模块中导入 Map 类
from pyecharts import options as opts # 从 pyecharts.options 模块中导入 opts 类
import random # 导入 random 模块
# 定义省份数据,以及每个省份的随机数据(模拟数据)
province = [
'广东省', '湖北省', '湖南省', '四川省', '重庆市', '黑龙江省',
'浙江省', '山西省', '河北省', '安徽省', '河南省', '山东省', '西藏自治区'
]
data = [(i, random.randint(50, 250)) for i in province]
# 创建一个 Map 对象,并添加数据
map = Map()
map.add('确诊人数', data)
# 设置全局选项,包括标题和视觉映射的设置
map.set_global_opts(
title_opts=opts.TitleOpts(title='全国疫情地图'), # 设置地图的标题
visualmap_opts=opts.VisualMapOpts( # 设置视觉映射的选项
is_piecewise=True, # 设置为分段型视觉映射
pieces=[
{'min': 50, 'max': 99, 'label': '50-99人', 'color': 'yellow'}, # 视觉映射的分段设置
{'min': 100, 'max': 149, 'label': '100-149人', 'color': 'pink'},
{'min': 150, 'max': 199, 'label': '150-199人', 'color': 'green'},
{'min': 200, 'max': 250, 'label': '200-250人', 'color': 'red'}
]
)
)
# 将图表保存为 HTML 文件,路径为 './map.html'
map.render('./map.html')
8、词云图
from pyecharts.charts import WordCloud # 从 pyecharts.charts 模块中导入 WordCloud 类
# 定义词云数据,每个元组包含单词和对应的频率
words = [
("economy", 1230),
("jude", 124),
("dont", 436),
("make", 255),
("it", 247),
("bad", 244),
("Take", 138),
("a sad song", 184),
("and", 12),
("make", 165),
("it", 247),
("better", 182),
("remember", 255),
("to", 150),
("let", 162),
("her", 266),
("into", 60),
("your", 82),
("heart", 173),
("then", 365),
("you", 360),
("can", 282),
("start", 273),
("make", 265),
]
# 创建一个 WordCloud 对象,并添加词云数据
wc = (
WordCloud() # 调用 WordCloud 类的构造函数
.add("", words) # 添加词云数据,空字符串表示没有系列名称
)
# 将词云图保存为 HTML 文件,路径为 './wc.html'
wc.render('./wc.html')
9、层叠图
from pyecharts.charts import Bar, Line # 从 pyecharts.charts 模块中导入 Bar 和 Line 类
# 定义横轴数据(x 轴)
x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
# 定义柱状图的纵轴数据
y_data_bar = [123, 153, 89, 107, 98, 23]
# 定义折线图的纵轴数据
y_data_line = [153, 107, 23, 89, 123, 107]
# 创建柱状图对象,添加横轴和纵轴数据
bar = (
Bar() # 调用 Bar 类的构造函数
.add_xaxis(x_data) # 添加横轴数据
.add_yaxis('', y_data_bar) # 添加柱状图的纵轴数据,空字符串表示没有系列名称
)
# 创建折线图对象,添加横轴和纵轴数据
line = (
Line() # 调用 Line 类的构造函数
.add_xaxis(x_data) # 添加横轴数据
.add_yaxis('', y_data_line) # 添加折线图的纵轴数据,空字符串表示没有系列名称
)
# 将折线图和柱状图进行重叠
overlap = line.overlap(bar)
# 将重叠图保存为 HTML 文件,路径为 './overlap.html'
overlap.render('./overlap.html')
10、3D 图
from pyecharts.charts import Bar3D # 从 pyecharts.charts 模块中导入 Bar3D 类
# 定义三维柱状图的数据,数据为一个二维列表
data = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 创建一个三维柱状图对象,添加数据
bar3d = Bar3D() # 调用 Bar3D 类的构造函数
bar3d.add("", data) # 添加三维柱状图的数据,空字符串表示没有系列名称
# 将三维柱状图保存为 HTML 文件,路径为 './bar3d.html'
bar3d.render('./bar3d.html')
11、仪表板
import numpy as np # 导入 NumPy 库并使用别名 np
from pyecharts.charts import * # 从 pyecharts.charts 模块中导入所有类
from pyecharts.charts import Page # 从 pyecharts.charts 模块中导入 Page 类
# 定义柱状图函数
def bar():
# 定义横轴和纵轴数据
x_data = ["水笔", "铅笔", "钢笔", "圆珠笔"]
y_data = [40, 30, 98, 42]
# 创建柱状图对象,添加横轴和纵轴数据
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("", y_data)
)
return bar
# 定义折线图函数
def line():
# 定义横轴和纵轴数据
x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']
y_data = [123, 153, 89, 107, 98, 23]
# 创建折线图对象,添加横轴和纵轴数据
line = (
Line()
.add_xaxis(x_data)
.add_yaxis('呵呵', y_data)
)
return line
# 定义散点图函数
def scatter():
# 生成正弦函数数据
x = np.linspace(0, 2 * np.pi, 100)
y = np.sin(x)
# 创建散点图对象,添加横轴和纵轴数据
scatter = (
Scatter()
.add_xaxis(x)
.add_yaxis("正弦", y)
)
return scatter
# 定义饼图函数
def pie():
# 定义饼图数据
num = [110, 136, 108, 48, 111, 112, 103]
lab = ['哈士奇', '萨摩耶', '泰迪', '金毛', '牧羊犬', '吉娃娃', '柯基']
data_pair_ = list(zip(lab, num))
# 创建饼图对象,添加数据
pie = (
Pie()
.add('饼图',
data_pair=data_pair_,
rosetype='radius',
radius=["20%", "45%"])
)
return pie
# 创建一个可拖动页面,设置页面标题
page = Page(layout=Page.DraggablePageLayout, page_title='haha')
# 添加各种图表到页面
page.add(
bar(),
line(),
scatter(),
pie()
)
# 将页面保存为 HTML 文件,路径为 './大屏.html'
page.render('./大屏.html')
拖动图表排列顺序后,点击 Save Config 按钮,将下载的 chart_config.json 保存至 大屏.html 同目录下
from pyecharts.charts import Page # 从 pyecharts.charts 模块中导入 Page 类
# 创建一个可拖动页面,设置页面标题
page = Page(layout=Page.DraggablePageLayout, page_title='haha')
# 保存配置后的文件
# page.save_resize_html(原html文件,拖拽保存的配置文件,成品的保存路径)
page.save_resize_html(r'./大屏.html',cfg_file='chart_config.json',dest="./大屏显示.html")
记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~