目录
- 一、概念
- 二、安装和导入
- 三、绘图逻辑
- 四、绘图
- 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")
记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~