文章目录
- 专栏导读
- 一、pyecharts 介绍
- 1. 简介
- 2. 版本说明
- 二、pyecharts 特点
- 三、pyecharts 安装
- 四、基本步骤
- 五、快速开始
- 1. 数据准备
- 1)类别数据
- 2)时间数据
- 3)颜色数据
- 4)地理数据
- 5)世界人口数据
- 6)选择数据
- 7)演示
- 2. 绘图输出到 jupyter notebook
- 3. 绘图输出到 html文件
- 4. 链式写法
- 5. 配置选项
专栏导读
🔥🔥本文已收录于《100天精通Python从入门到就业》:本专栏专门针对零基础和需要进阶提升的同学所准备的一套完整教学,从0到100的不断进阶深入,后续还有实战项目,轻松应对面试,专栏订阅地址:https://blog.csdn.net/yuan2019035055/category_11466020.html
- 优点:订阅限时9.9付费专栏进入千人全栈VIP答疑群,作者优先解答机会(代码指导、远程服务),群里大佬众多可以抱团取暖(大厂内推机会)
- 专栏福利:简历指导、招聘内推、每周送实体书、80G全栈学习视频、300本IT电子书:Python、Java、前端、大数据、数据库、算法、爬虫、数据分析、机器学习、面试题库等等
一、pyecharts 介绍
1. 简介
pyecharts是一个基于Echarts.js库的Python可视化工具,可以用于生成各种类型的图表,包括折线图、柱状图、散点图、地图等等。pyecharts提供了一套简单易用的API,可以方便地进行数据处理和图表生成,同时还支持多种输出格式,包括HTML、Jupyter Notebook、图片等。并且可以生成独立的网页,可以与flask、Django框架搭配使用编写前后端项目;后续也会带着大家完成可视化大屏项目。
官方中文文档:https://pyecharts.org/#/zh-cn/global_options
官方Github链接:https://github.com/pyecharts/pyecharts/
2. 版本说明
V0.5x版本:不再进行维护。仅支持python2.7、3.4+
V1.0x版本:仅支持python3.6+;V1 版本开始支持链式调用
二、pyecharts 特点
- 支持多种类型的图表,包括基本的图表类型和复杂的地图类型;
- 提供了丰富的图表样式和配置选项,可以自定义图表的颜色、标签、标题等;
- 支持多种数据格式,包括Python内置的数据结构和常见的数据文件格式;
- 提供了简单易用的API,可以方便地进行数据处理和图表生成;
- 支持多种输出格式,包括HTML、Jupyter Notebook、图片等。
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
如果需要绘制地理图相关内容,需要安装地图文件:
-
中国市级地图: echarts-china-cities-pypkg
-
中国省级地图: echarts-china-provinces-pypkg
-
全球国家地图: echarts-countries-pypkg
pip install pyecharts
pip install echarts-countries-pypkg
pip install echarts-china-provinces-pypkg
pip install echarts-china-cities-pypkg
四、基本步骤
使用 Pyecharts 创建图形的基本步骤是
-
准备数据
-
设计图形的样式、背景颜色
-
Pyecharts 绘图
-
设计图表的标题或者图例等属性
-
导出至 html
五、快速开始
1. 数据准备
pyecharts自带的数据集存储于 faker.py 文件中,这些以列表的方式存储,主要包含类别数据、时间数据、颜色数据、地理数据、世界人口数据。
1)类别数据
clothes = ["衬衫", "毛衣", "领带", "裤子", "风衣", "高跟鞋", "袜子"]
drinks = ["可乐", "雪碧", "橙汁", "绿茶", "奶茶", "百威", "青岛"]
phones = ["小米", "三星", "华为", "苹果", "魅族", "VIVO", "OPPO"]
fruits = ["草莓", "芒果", "葡萄", "雪梨", "西瓜", "柠檬", "车厘子"]
animal = ["河马", "蟒蛇", "老虎", "大象", "兔子", "熊猫", "狮子"]
cars = ["宝马", "法拉利", "奔驰", "奥迪", "大众", "丰田", "特斯拉"]
dogs = ["哈士奇", "萨摩耶", "泰迪", "金毛", "牧羊犬", "吉娃娃", "柯基"]
2)时间数据
week = ["周一", "周二", "周三", "周四", "周五", "周六", "周日"]
week_en = "Saturday Friday Thursday Wednesday Tuesday Monday Sunday".split()
clock = (
"12a 1a 2a 3a 4a 5a 6a 7a 8a 9a 10a 11a 12p "
"1p 2p 3p 4p 5p 6p 7p 8p 9p 10p 11p".split()
)
months = ["{}月".format(i) for i in range(1, 13)]
days_attrs = ["{}天".format(i) for i in range(30)]
days_values = [random.randint(1, 30) for _ in range(30)]
3)颜色数据
visual_color = [
"#313695",
"#4575b4",
"#74add1",
"#abd9e9",
"#e0f3f8",
"#ffffbf",
"#fee090",
"#fdae61",
"#f46d43",
"#d73027",
"#a50026",
]
4)地理数据
provinces = ["广东", "北京", "上海", "江西", "湖南", "浙江", "江苏"]
guangdong_city = ["汕头市", "汕尾市", "揭阳市", "阳江市", "肇庆市", "广州市", "惠州市"]
country = [
"China",
"Canada",
"Brazil",
"Russia",
"United States",
"Africa",
"Germany",
]
5)世界人口数据
2019年世界人口数据集,结构为二层嵌套列表,结构如下,第一列为国家或地区,第二列为人口数量:
POPULATION = [
["Country (or dependency)", "Population\n(2019)"],
["China", 1420062022],
["India", 1368737513],
["United States", 329093110],
["Indonesia", 269536482],
["Brazil", 212392717],
["Pakistan", 204596442],
["Nigeria", 200962417],
["Bangladesh", 168065920],
["Russia", 143895551],
["Mexico", 132328035],
["Japan", 126854745],
["Ethiopia", 110135635],
...
]
6)选择数据
choose
:随机选择类别数据集
def choose(self) -> list:
return random.choice(
[
self.clothes,
self.drinks,
self.phones,
self.fruits,
self.animal,
self.dogs,
self.week,
]
)
values
:随机生成7个数字(20-150)构成的列表
@staticmethod
def values(start: int = 20, end: int = 150) -> list:
return [random.randint(start, end) for _ in range(7)]
rand_color
:随机从列表中生成1个颜色值
@staticmethod
def rand_color() -> str:
return random.choice(
[
"#c23531",
"#2f4554",
"#61a0a8",
"#d48265",
"#749f83",
"#ca8622",
"#bda29a",
"#6e7074",
"#546570",
"#c4ccd3",
"#f05b72",
"#444693",
"#726930",
"#b2d235",
"#6d8346",
"#ac6767",
"#1d953f",
"#6950a1",
]
)
img_path
:为路径添加前缀,默认为images
@staticmethod
def img_path(path: str, prefix: str = "images") -> str:
return os.path.join(prefix, path)
7)演示
这段代码主要是演示了 pyecharts 中的 Faker 和 POPULATION 模块的用法。Faker 模块用于生成一些假数据,例如随机字符串、随机数字、随机颜色等;POPULATION 模块用于提供一些城市的人口数据。在这段代码中,我们分别打印了 Faker 模块中的 week 属性、choose 方法、values 方法和 rand_color 方法,以及 POPULATION 模块。
from pyecharts.faker import POPULATION, Faker # 导入 pyecharts 中的 Faker 和 POPULATION 模块
print(Faker.week) # 打印 Faker 模块中的 week 属性,返回一周的日期列表
print(
Faker.choose(), # 打印 Faker 模块中的 choose 方法,返回一个随机的字符串
Faker.values(), # 打印 Faker 模块中的 values 方法,返回一个随机的数字列表
Faker.rand_color() # 打印 Faker 模块中的 rand_color 方法,返回一个随机的 RGB 颜色值
)
print(POPULATION) # 打印 POPULATION 模块,返回一个包含各个城市人口数量的列表
运行结果:
2. 绘图输出到 jupyter notebook
在这段代码中,我们首先导入了 pyecharts 中的一些模块,包括 options、charts 和 faker 模块。然后,我们使用 faker 模块中的 choose 和 values 方法生成了 x 轴和 y 轴的数据。接下来,我们创建了一个柱状图对象,并使用 add_xaxis 和 add_yaxis 方法设置 x 轴和 y 轴的数据。
from pyecharts.charts import Bar
from pyecharts.faker import Faker
# 通过列表名指定x轴标签
x_data = Faker.dogs
# 也可以随机选择x轴标签
# x_data = Faker.choose()
# 随机生成y轴数据
y_data = Faker.values()
# 添加x轴数据
bar.add_xaxis(x_data)
# 添加y轴数据及其名称
bar.add_yaxis("数量", y_data)
# 在notebook中渲染图表
bar.render_notebook()
运行结果:
3. 绘图输出到 html文件
通过设置bar.render(path='文件名.html')
将图表输出到html文件:
# 导入Bar类
from pyecharts.charts import Bar
# 创建一个Bar实例
bar = Bar()
# 添加x轴数据
bar.add_xaxis(["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"])
# 添加y轴数据及其名称
bar.add_yaxis("商家A", [5, 20, 36, 10, 75, 90])
# 生成 HTML 文件
bar.render(path='柱状图.html')
会在指定路径下生成html文件
:
点开后如下:
4. 链式写法
有些程序员喜欢链式调用,或者链式调用在某些情况下可以让代码更加简洁。pyecharts中所有的方法都支持链式调用。比如以上条形图的代码可以改成:
from pyecharts.charts import Bar
from pyecharts.faker import Faker
# 通过列表名指定x轴标签
x_data = Faker.dogs
# 也可以随机选择x轴标签
# x_data = Faker.choose()
# 随机生成y轴数据
y_data = Faker.values()
# 创建柱状图对象
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("数量", y_data)
)
# 在notebook中渲染图表
bar.render_notebook()
运行结果:
5. 配置选项
Pyecharts中的set_global_opts
()函数用于设置图表的全局选项,包括标题、图例、x轴、y轴、提示框等。该函数的参数是一个opts.GlobalOpts类型的对象,可以设置以下选项:
- title_opts: 设置标题选项,包括标题文本、副标题文本、位置、颜色等。
- legend_opts: 设置图例选项,包括是否显示、位置、颜色等。
- tooltip_opts: 设置提示框选项,包括触发方式、格式化函数、背景色等。
- xaxis_opts: 设置x轴��项,包括轴线、刻度、标签等。
- yaxis_opts: 设置y轴选项,包括轴线、刻度、标签等。
- visualmap_opts: 设置视觉映射选项,包括映射范围、颜色、标签等。
除了以上选项外,还可以设置其他全局选项,具体可以参考官方文档。
下面是一个示例代码,展示如何使用set_global_opts()函数设置柱状图的全局选项:
from pyecharts.charts import Bar
from pyecharts.faker import Faker
from pyecharts import options as opts
# 通过列表名指定x轴标签
x_data = Faker.dogs
# 随机生成y轴数据
y_data = Faker.values()
# 创建柱状图对象
bar = (
Bar()
.add_xaxis(x_data)
.add_yaxis("数量", y_data)
.set_global_opts(
title_opts=opts.TitleOpts(title="狗狗数量统计", subtitle="数据来源:Faker.py"),
legend_opts=opts.LegendOpts(is_show=True, pos_right="20%"),
tooltip_opts=opts.TooltipOpts(trigger="axis", axis_pointer_type="cross"),
xaxis_opts=opts.AxisOpts(axislabel_opts=opts.LabelOpts(rotate=-45)),
yaxis_opts=opts.AxisOpts(name="数量", axislabel_opts=opts.LabelOpts(formatter="{value}只"))
)
)
# 在notebook中渲染图表
bar.render_notebook()
代码中,使用set_global_opts()函数设置了柱状图的标题、副标题、图例、提示框、x轴、y轴等全局选项。其中,title_opts参数设置了标题和副标题,legend_opts参数设置了图例位置和是否显示,tooltip_opts参数设置了提示框触发方式和指示器类型,xaxis_opts参数设置了x轴标签旋转角度,yaxis_opts参数设置了y轴名称和刻度标签格式。
运行结果: