Matplotlib(二)- Matplotlib简单绘图
文章目录
- 一、pyplot模块介绍
- 二、Matplotlib简单绘图
- 1. 绘制折线图
- 1.1 折线图介绍
- 1.2 plt.plot()函数介绍
- 1.3 绘制简单折线图
- 1.3.1 绘制单条折线图
- 1.3.2 绘制多条折线图
- 1.4 示例:绘制天气气温折线图
- 2. 绘制柱形图
- 2.1 柱形图介绍
- 2.2 plt.bar()函数介绍
- 2.3 绘制柱形图
- 2.3.1 绘制简单柱形图
- 2.3.2 绘制分区柱形图
- 2.3.3 绘制堆积柱形图
- 2.4 示例:绘制国内生产总值柱形图
- 3. 绘制条形图
- 3.1 条形图介绍
- 3.2 plt.barh()函数介绍
- 3.3 绘制条形图
- 3.3.1 绘制简单条形图
- 3.3.2 绘制分区条形图
- 3.3.3 绘制堆积条形图
- 3.4 示例:绘制网购替代率条形图
- 4. 绘制堆积面积图
- 4.1 堆积面积图介绍
- 4.2 plt.stackplot()函数介绍
- 4.3 绘制堆积面积图
- 4.4 示例:绘制物流公司物流费用堆积面积图
- 5. 绘制直方图
- 5.1 直方图介绍
- 5.2 plt.hist()函数介绍
- 5.3 绘制直方图
- 5.4 示例:绘制薪资分布直方图
- 6. 绘制饼图
- 6.1 饼图介绍
- 6.2 plt.pie()函数介绍
- 6.3 绘制饼图
- 6.3.1 绘制饼图
- 6.3.2 绘制圆环图
- 6.4 示例:绘制账单饼图
- 7. 绘制散点图
- 7.1 散点图和气泡图介绍
- 7.2 plt.scatter()函数介绍
- 7.3 绘制散点图
- 7.3.1 绘制散点图
- 7.3.2 绘制气泡散点图
- 7.4 示例:绘制车速与制动距离散点图
- 8. 绘制箱形图
- 8.1 箱形图介绍
- 8.2 plt.boxplot()函数介绍
- 8.3 绘制箱形图
- 8.4 示例:绘制发电量箱形图
- 9. 绘制雷达图
- 9.1 雷达图介绍
- 9.2 plt.polar()函数介绍
- 9.3 绘制雷达图
- 9.4 示例:绘制霍兰德职业兴趣测试雷达图
- 10. 绘制误差棒图
- 10.1 误差棒图介绍
- 10.2 plt.errorbar()函数介绍
- 10.3 绘制误差棒图
- 10.4 示例:绘制城市人口增长误差棒图
一、pyplot模块介绍
在 Matplotlib 的世界里,pyplot 模块就像是一把功能强大的绘图瑞士军刀,是我们进行数据可视化操作时最常用的接口。它提供了一套与 MATLAB 类似的绘图函数集合,让开发者能够以简单直观的方式创建各种类型的图表。
pyplot 模块的设计理念是将绘图过程分解为一系列简单的步骤,通过调用不同的函数来逐步构建图表。从创建画布、绘制图形元素,到设置坐标轴、添加标题和图例,再到保存或显示图表,每一个环节都有对应的函数可供使用。
使用 pyplot 模块时,它会自动管理当前的图形和绘图区域,我们无需过多关注底层的对象创建和管理细节,只需专注于数据的呈现方式。比如,当我们调用plt.plot()函数时,它会在当前的绘图区域中绘制线条;调用plt.xlabel()则会为当前图表的 x 轴添加标签。这种简洁的操作方式使得即使是初学者,也能快速上手并绘制出具有一定专业性的数据图表。
同时,pyplot 模块还支持对图表的各种样式进行精细调整,包括颜色、线型、标记点、字体大小等,让我们能够根据实际需求打造出美观且信息清晰的可视化效果。接下来,我们就将运用 pyplot 模块来绘制各种简单的图表。
二、Matplotlib简单绘图
1. 绘制折线图
1.1 折线图介绍
折线图是一种以线条的起伏来展示数据变化趋势的图表,非常适合用于显示随时间或其他连续变量变化的数据。在 Matplotlib 中,可以使用plt.plot()
函数来绘制折线图。
1.2 plt.plot()函数介绍
matplotlib.pyplot.plot()
是 Matplotlib 库中最常用的函数之一,用于绘制二维折线图。它支持多种参数,可以灵活地控制图形的样式、颜色、标记等。
下面是以表格形式介绍 plt.plot()
函数的主要参数及其取值说明:
参数名 | 参数类型 | 常见取值 | 说明 |
---|---|---|---|
x | array-like 或 scalar | 例如 [1,2,3,4] , np.arange(10) | x轴数据,可以是列表、数组等。如果未提供,则使用默认的从0开始的索引序列。 |
y | array-like 或 scalar | 例如 [1,4,9,16] , np.sin(x) | y轴数据,必须提供。 |
fmt | string(格式字符串) | 'r' , 'g--' , 'bo' , 'k^:' 等 | 简写格式字符串,用于同时指定颜色、标记和线型。格式为 [color][marker][line] 。 |
color 或 c | string、tuple、matplotlib颜色 | 'red' , 'g' , (0.5, 0.2, 0.7) 等 | 设置线条颜色。 |
marker | string | 'o' , 's' , 'd' , '^' , '+' 等 | 设置数据点的标记样式。 |
markersize 或 ms | float | 10 | 设置标记的大小。 |
markerfacecolor 或 mfc | string、tuple | 'blue' | 设置标记的填充颜色。 |
markeredgecolor 或 mec | string、tuple | 'black' | 设置标记边缘的颜色。 |
markeredgewidth 或 mew | float | 2 | 设置标记边缘的宽度。 |
linestyle 或 ls | string | '-' , '--' , ':' , '-.' , ' ' | 设置线条样式。 |
linewidth 或 lw | float | 2 | 设置线条宽度。 |
alpha | float (0.0 ~ 1.0) | 0.5 | 设置透明度,0为完全透明,1为不透明。 |
label | string | 'sin(x)' | 设置图例标签。 |
scalex / scaley | boolean | True | 是否根据数据自动调整x/y轴的缩放比例。 |
where | string ('pre' , 'post' , 'mid' ) | 'pre' | 用于 step() 图,设置阶梯图的绘制方式。 |
solid_capstyle | string | 'round' , 'butt' , 'projecting' | 设置线段末端的样式(实线)。 |
dash_capstyle | string | 同上 | 设置虚线末端的样式。 |
solid_joinstyle / dash_joinstyle | string | 'miter' , 'round' , 'bevel' | 设置线段连接处的样式。 |
fillstyle | string | 'full' , 'left' , 'right' , 'bottom' , 'top' | 设置标记的填充样式。 |
data | indexable object | pandas DataFrame | 提供一个数据源,可以结合 x 和 y 使用列名。 |
1.3 绘制简单折线图
1.3.1 绘制单条折线图
# 导入 matplotlib 的 pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 定义 x 轴数据:年份从 2010 到 2019
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]# 定义 y 轴数据:对应年份的数值
y = [10, 15, 18, 25, 30, 50, 65, 70, 80, 95]# 使用 plot 函数绘制折线图,x 和 y 是数据
plt.plot(x, y)# 显示绘制好的图形窗口
plt.show()
绘制的图形如下图所示:
1.3.2 绘制多条折线图
# 导入 matplotlib 的 pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 定义 x 轴数据:年份从 2010 到 2019
x = [2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019]# 定义 y 轴数据:对应年份的数值
y = [10, 15, 18, 25, 30, 50, 65, 70, 80, 95]
y2 = [12, 16, 20, 30, 40, 60, 70, 80, 95, 100]# 使用 plot 函数绘制折线图,x 和 y 是数据
# plt.plot(x, y)
# plt.plot(x, y2)
plt.plot(x, y, x, y2)# 显示绘制好的图形窗口
plt.show()
绘制的图形如下图所示:
1.4 示例:绘制天气气温折线图
数据如下图所示,需要根据这个数据绘制气温折线图。
实现代码如下图所示:
import matplotlib.pyplot as plt
import pandas as pd# 请将此处替换为你的CSV文件路径
csv_file_path = './data/气温.csv'
# 读取CSV文件
df = pd.read_csv(csv_file_path)# 处理日期格式
df['日期'] = pd.to_datetime(df['日期'])# 提取温度数值(去除℃符号并转换为整数)
df['最高气温'] = df['最高气温'].str.replace('℃', '').astype(int)
df['最低气温'] = df['最低气温'].str.replace('℃', '').astype(int)# 绘制折线图
# plt.plot(df['日期'], df['最高气温'])
# plt.plot(df['日期'], df['最低气温'])
plt.plot('日期', '最高气温', data=df)
plt.plot('日期', '最低气温', data=df)# 设置x轴日期格式,自动旋转日期标签
plt.gcf().autofmt_xdate()# 显示图形
plt.show()
绘制的图形如下图所示:
2. 绘制柱形图
2.1 柱形图介绍
柱形图主要用于比较不同类别之间的数据差异,它通过柱形的高度来直观地展示数据的大小。Matplotlib 中提供了plt.bar()
函数来绘制柱形图。
2.2 plt.bar()函数介绍
plt.bar()
函数用于在图表中绘制柱形图。以下是以表格形式展示的 plt.bar()
参数及参数取值说明:
参数 | 描述 | 取值示例 |
---|---|---|
left | 条形图左边界的x坐标,可以是标量或数组。从matplotlib 3.4版本开始已弃用,推荐使用 x 参数代替。 | [1, 2, 3] 或者 1 |
height | 每个条形的高度,表示数据的值。可以是一个数值(对于单个条形)或一个序列(对于多个条形)。 | [10, 20, 30] |
width | 条形的宽度,默认值为0.8。可以是单一数值应用于所有条形,也可以是数组对每个条形单独指定宽度。 | 0.5 或者 [0.2, 0.5, 0.7] |
bottom | 条形图的基线位置,默认为0。可以用来创建堆积条形图。 | [0, 0, 0] 或者 10 |
align | 控制条形与它们的x坐标如何对齐。可选值有center 和edge 。默认值为center 。 | 'center' 或 'edge' |
color | 条形的颜色。可以是单一颜色应用于所有条形,也可以是颜色数组对每个条形单独指定颜色。 | 'red' 或者 ['blue', 'green', 'red'] |
edgecolor | 条形边缘的颜色。 | 'black' |
linewidth | 条形边缘线条的宽度。 | 1.5 |
tick_label | 设置每个条形的标签。可以是一个字符串列表。 | ['label1', 'label2', 'label3'] |
x | 条形的中心位置的x坐标,替代了早期版本中的left参数。 | [1, 2, 3] |
y | 在水平方向上放置条形时使用的y坐标,较少使用。 | [1, 2, 3] |
2.3 绘制柱形图
2.3.1 绘制简单柱形图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 定义柱状图中每个柱子在 x 轴上的位置(分类标签)
x = [0, 1, 2, 3, 4]# 定义 x 轴上实际显示的刻度标签(即替换 x 的显示)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定义每个柱子的高度(y 轴数值)
height = [3, 5, 2, 8, 6]# 绘制柱状图:
# - x: 每个柱子在 x 轴上的位置(分类)
# - height: 每个柱子的高度
# - tick_label: 替换 x 轴上默认的标签(即用 tick_label 的值显示在图上)
plt.bar(x=x, height=height, tick_label=tick_label)# 显示绘制完成的图表
plt.show()
绘制的图形如下图所示:
2.3.2 绘制分区柱形图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt
# 导入 numpy 模块,用于数值计算,这里主要用于生成数组
import numpy as np# 使用 numpy 创建一个数组,表示柱状图中每个柱子在 x 轴上的位置
x = np.array([0, 1, 2, 3, 4])# 定义 x 轴上实际显示的刻度标签(对应每个柱子)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定义第一组数据的高度(y 轴数值),代表第一个柱状图的数据集
height = [3, 5, 2, 8, 6]
# 定义第二组数据的高度(y 轴数值),代表第二个柱状图的数据集
height2 = [5, 7, 3, 9, 8]# 设置柱子的宽度
width = 0.3# 绘制第一组柱状图:
# - x: 每个柱子在 x 轴上的位置(基于之前定义的数组)
# - height: 第一组柱子的高度
# - tick_label: 替换 x 轴上默认的标签为自定义的标签
# - width: 设置柱子的宽度
plt.bar(x=x, height=height, tick_label=tick_label, width=width)# 绘制第二组柱状图:
# - x + width: 将第二组柱子的位置相对于第一组向右移动一定宽度,以避免重叠
# - height2: 第二组柱子的高度
# - width: 设置柱子的宽度
plt.bar(x=x + width, height=height2, width=width)# 显示绘制完成的图表
plt.show()
绘制的图形如下图所示:
2.3.3 绘制堆积柱形图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt
# 导入 numpy 模块,用于数值计算,这里主要用于生成数组
import numpy as np# 使用 numpy 创建一个数组,表示柱状图中每个柱子在 x 轴上的位置
x = np.array([0, 1, 2, 3, 4])# 定义 x 轴上实际显示的刻度标签(对应每个柱子)
tick_label = ['a', 'b', 'c', 'd', 'e']# 定义第一组数据的高度(y 轴数值),代表第一个柱状图的数据集
height = [3, 5, 2, 8, 6]
# 定义第二组数据的高度(y 轴数值),代表第二个柱状图的数据集
height2 = [5, 7, 3, 9, 8]# 设置柱子的宽度
width = 0.3# 绘制第一组柱状图:
# - x: 每个柱子在 x 轴上的位置(基于之前定义的数组)
# - height: 第一组柱子的高度
# - tick_label: 替换 x 轴上默认的标签为自定义的标签
# - width: 设置柱子的宽度
plt.bar(x=x, height=height, tick_label=tick_label, width=width)# 绘制第二组柱状图,并堆叠在第一组之上:
# - x: 同样使用之前定义的位置数组
# - height2: 第二组柱子的高度
# - width: 柱子的宽度与第一组保持一致
# - bottom=height: 将第二组柱子堆叠在第一组柱子之上,通过设置底部位置为第一组柱子的高度实现堆积效果
plt.bar(x=x, height=height2, width=width, bottom=height)# 显示绘制完成的图表
plt.show()
绘制的图形如下图所示:
2.4 示例:绘制国内生产总值柱形图
数据如下图所示,需要根据这个数据绘制国内生产总值柱形图。
实现代码如下图所示:
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 导入 numpy 模块,用于数值计算,这里主要用于生成数组
import numpy as np# 导入 pandas 模块,用于数据处理,特别是读取和操作 CSV 文件
import pandas as pd# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解决负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False# 定义 CSV 文件的路径(请根据实际情况修改路径)
csv_file_path = './data/国内生成总值.csv'# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将数据存储在一个 DataFrame 对象中
df = pd.read_csv(csv_file_path)# 使用 numpy 的 arange 函数生成一个从 0 到 len(df)-1 的数组,表示柱状图中每个柱子的 x 轴位置
x = np.arange(len(df))# 从 DataFrame 中提取 '年份' 列,作为 x 轴的刻度标签
tick_label = df['年份'].apply(lambda x1: str(x1) + '年')# 从 DataFrame 中提取 '生产总值' 列,作为柱状图中每个柱子的高度
height = df['生产总值']# 绘制柱状图:
# - x: 每个柱子在 x 轴上的位置(基于之前生成的数组)
# - height: 指定为 '生产总值',表示从 data 参数中提取该列作为柱子的高度
# - width: 设置柱子的宽度为 0.5
# - tick_label: 指定为 '年份',表示从 data 参数中提取该列作为 x 轴的刻度标签
# - data: 传入之前读取的 DataFrame,作为绘图的数据源
# plt.bar(x=x, height='生产总值', width=0.5, tick_label='年份', data=df)
plt.bar(x=x, height=height, width=0.5, tick_label=tick_label)# 显示绘制完成的图表
plt.show()
绘制的图形如下图所示:
3. 绘制条形图
3.1 条形图介绍
条形图与柱形图类似,只是将柱形的方向旋转了 90 度,变成了水平方向。它适合用于类别名称较长或数据系列较多的情况,Matplotlib 中使用plt.barh()
函数来绘制条形图。
3.2 plt.barh()函数介绍
plt.barh()
函数用于在图表中绘制水平的条形图。以下是以表格形式展示的 plt.barh()
参数及参数取值说明:
参数 | 描述 | 取值示例 |
---|---|---|
y | 条形图基线位置的y坐标,可以是标量或数组。从matplotlib 3.4版本开始已弃用,推荐使用 y 参数代替。 | [1, 2, 3] 或者 1 |
width | 每个条形的宽度(沿x轴方向的实际长度),表示数据的值。可以是一个数值(对于单个条形)或一个序列(对于多个条形)。 | [10, 20, 30] |
height | 条形的高度,默认值为0.8。可以是单一数值应用于所有条形,也可以是数组对每个条形单独指定高度。 | 0.5 或者 [0.2, 0.5, 0.7] |
left | 条形图的起点位置,默认为0。可以用来创建堆积条形图。 | [0, 0, 0] 或者 10 |
align | 控制条形与它们的y坐标如何对齐。可选值有center 和edge 。默认值为center 。 | 'center' 或 'edge' |
color | 条形的颜色。可以是单一颜色应用于所有条形,也可以是颜色数组对每个条形单独指定颜色。 | 'red' 或者 ['blue', 'green', 'red'] |
edgecolor | 条形边缘的颜色。 | 'black' |
linewidth | 条形边缘线条的宽度。 | 1.5 |
tick_label | 设置每个条形的标签。可以是一个字符串列表。 | ['label1', 'label2', 'label3'] |
x | 条形的中心位置的x坐标,替代了早期版本中的left参数。 | [1, 2, 3] |
orientation | 指定条形图的方向,但plt.barh() 固定为水平方向,因此这个参数通常不需设置也不影响绘图效果。 | 固定为 'horizontal' |
3.3 绘制条形图
3.3.1 绘制简单条形图
# 导入matplotlib.pyplot模块作为plt,用于绘图;
# 导入numpy模块作为np,用于进行数值计算。
import matplotlib.pyplot as plt
import numpy as np# 使用numpy创建一个数组y,它代表每个条形在图表中的y坐标位置(垂直方向)。
# 这里y轴的位置是从0到4。
y = np.array([0, 1, 2, 3, 4])# 定义一个字符串列表tick_label,包含每个条形对应的标签。
# 这些标签将显示在图表中对应于每个条形的位置。
tick_label = ['a', 'b', 'c', 'd', 'e']# 创建一个名为width的列表,表示每个条形沿x轴方向的实际长度(即条形的宽度),
# 也就是每个条形所代表的数据值。
width = [3, 5, 2, 8, 6]# 调用plt.barh()函数绘制水平条形图:
# y=y:指定每个条形在y轴上的位置;
# width=width:为每个条形指定宽度(即数据值);
# tick_label=tick_label:为每个条形指定标签。
plt.barh(y=y, width=width, tick_label=tick_label)# 调用plt.show()函数显示图表窗口,并展示绘制好的水平条形图。
plt.show()
绘制的图形如下图所示:
3.3.2 绘制分区条形图
# 导入matplotlib.pyplot模块作为plt,用于绘图。
import matplotlib.pyplot as plt# 导入numpy模块作为np,用于进行数值计算。
import numpy as np# 使用numpy创建一个数组y,它代表每个条形在图表中的y坐标位置(垂直方向)。
# 这里y轴的位置是从0到4,对应5个不同的数据点。
y = np.array([0, 1, 2, 3, 4])# 定义一个字符串列表tick_label,包含每个条形对应的标签。
# 这些标签将显示在图表中对应于每个条形的位置。
tick_label = ['a', 'b', 'c', 'd', 'e']# 创建两个名为width和width2的列表,分别表示两组数据集的宽度(即数据值)。
# width代表第一组数据的长度,而width2代表第二组数据的长度。
width = [3, 5, 2, 8, 6]
width2 = [5, 7, 3, 9, 8]# 设置条形的宽度。这里设置了一个较小的高度值,以便绘制相邻的条形图。
height = 0.3# 绘制第一个水平条形图。使用原始y坐标,并设置了条形的宽度、高度以及标签。
# height=height:指定每个条形的高度,使得我们可以看到分组的条形。
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 绘制第二个水平条形图。通过给y坐标加上height值来调整位置,避免与第一个条形图重叠。
# 此外,没有为这组条形图设置标签,因为它们会与前一组的标签重叠。
plt.barh(y=y + height, width=width2, height=height)# 显示图形窗口,并展示绘制好的水平条形图。
plt.show()
绘制的图形如下图所示:
3.3.3 绘制堆积条形图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 导入 numpy 模块,用于创建数组
import numpy as np# 创建一个 numpy 数组 y,表示每个数据点在 y 轴上的位置(即条形图的垂直位置)
# 这里是 0 到 4,共 5 个位置,对应 a 到 e 的标签
y = np.array([0, 1, 2, 3, 4])# 定义条形图对应的 y 轴标签,每个标签对应一个 y 值
tick_label = ['a', 'b', 'c', 'd', 'e']# 第一组数据:每个条形的宽度(代表数据值)
width = [3, 5, 2, 8, 6]# 第二组数据:另一组宽度值,用于与第一组数据堆叠显示
width2 = [5, 7, 3, 9, 8]# 设置每个条形的高度(水平条形图的高度是指条形的垂直方向长度)
height = 0.3# 绘制第一组水平条形图:
# - y:每个条形在 y 轴上的位置
# - width:条形的宽度(数据值)
# - height:条形高度
# - tick_label:设置 y 轴上的标签
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 绘制第二组水平条形图,并堆叠在第一组之上:
# - y:与第一组相同,表示在同一行绘制
# - width:第二组的数据宽度
# - height:同样设置高度
# - left=width:将第二组条形的起始位置设置为第一组的结束位置,实现堆叠效果
plt.barh(y=y, width=width2, height=height, left=width)# 显示绘制好的图表
plt.show()
绘制的图形如下图所示:
3.4 示例:绘制网购替代率条形图
数据如下图所示,需要根据这个数据绘制网购替代率条形图。
实现代码如下图所示:
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 导入 numpy 模块,用于数值计算
import numpy as np# 导入 pandas 模块,用于数据处理和分析
import pandas as pd# 设置matplotlib使用SimHei作为默认字体,以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决保存图像时负号'-'显示为方块的问题
plt.rcParams['axes.unicode_minus'] = False# 定义CSV文件路径
csv_file_path = './data/网购替代率.csv'# 使用pandas读取CSV文件,将内容加载到DataFrame中
df = pd.read_csv(csv_file_path)# 根据DataFrame的长度创建一个numpy数组y,代表每个条形在y轴上的位置
y = np.arange(len(df))# 从DataFrame中提取“商品种类”列作为条形图的标签
tick_label = df['商品种类']# 将“替代率”列中的百分比符号去掉,并转换为浮点数,然后除以100得到实际比例值
width = df['替代率'].apply(lambda x: x.replace('%', '')).astype(float) / 100# 设置条形的宽度(这里实际上是指高度,因为是水平条形图)
height = 0.6# 绘制水平条形图:
# - y:每个条形在y轴上的位置
# - width:条形的宽度(这里是经过转换后的替代率)
# - height:条形的高度(垂直方向的实际大小)
# - tick_label:设置y轴上的标签
plt.barh(y=y, width=width, height=height, tick_label=tick_label)# 自动调整子图(subplot)之间的参数,使得图形元素(如坐标轴标签、图例、标题等)紧凑地排列,避免重叠或超出图形边界。
plt.tight_layout()# 显示绘制好的图表
plt.show()
绘制的图形如下图所示:
4. 绘制堆积面积图
4.1 堆积面积图介绍
堆积面积图用于展示多个数据系列在不同类别上的累积趋势,通过填充线条下方的区域并进行堆积,来体现数据的总量和各部分的构成。在 Matplotlib 中,可以使用plt.stackplot()
函数来绘制堆积面积图。
4.2 plt.stackplot()函数介绍
matplotlib.pyplot.stackplot() 是用于绘制 堆叠面积图(Stacked Area Plot) 的函数,常用于展示多个数据系列随时间或其他变量变化的累积趋势。
以下是 matplotlib.pyplot.stackplot()
函数的参数介绍:
参数名 | 描述 | 取值示例 |
---|---|---|
x | x轴的数据,通常是一个一维数组或列表,表示每个数据点的位置 | range(5) 、[1, 2, 3, 4, 5] |
y1, y2, ..., yn | 多个数据序列,表示堆叠的每一层数据,可以是多个一维数组或列表 | [2, 4, 6] , [1, 3, 5] |
labels | 为每个堆叠层设置标签,用于图例显示 | ['A', 'B', 'C'] |
colors 或 color | 设置每个堆叠层的颜色 | ['red', 'blue', 'green'] 、'#FFA500' |
baseline | 设置堆叠的基线方式,影响堆叠层的排列方式 | 'zero' (默认)、'sym' 、'wiggle' 、'weighted_wiggle' |
edgecolor | 设置堆叠区域边缘的颜色 | 'black' 、'gray' |
linewidth 或 lw | 设置堆叠区域边缘线的宽度 | 1.5 、2 |
alpha | 设置堆叠区域的透明度(0.0完全透明,1.0不透明) | 0.5 、0.7 |
data | 提供一个可索引的数据对象(如 pandas DataFrame),可以通过列名访问数据 | df (一个 pandas DataFrame) |
4.3 绘制堆积面积图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 定义 x 轴的分类标签(可以是字符串、数字等)
x = ['a', 'b', 'c', 'd', 'e']# 定义第一组数据(y1),对应堆叠面积图中的一层
y1 = [1, 4, 3, 5, 6]# 定义第二组数据(y2),堆叠在 y1 之上
y2 = [2, 3, 4, 2, 7]# 定义第三组数据(y3),堆叠在 y2 之上
y3 = [3, 4, 3, 6, 5]# 绘制堆叠面积图(stacked area chart):
# - x: x 轴上的分类标签
# - y1, y2, y3: 多组数据,依次堆叠在一起,形成层次感
# 默认情况下,不同数据集会使用不同的颜色,并自动图例叠加显示
plt.stackplot(x, y1, y2, y3)# 显示绘制完成的图表
plt.show()
绘制的图形如下图所示:
4.4 示例:绘制物流公司物流费用堆积面积图
数据如下图所示,需要根据这个数据物流公司物流费用堆积面积图。
实现代码如下图所示:
# 导入 matplotlib.pyplot 模块,用于绘制图表
import matplotlib.pyplot as plt# 导入 pandas 模块,用于读取和处理 CSV 数据
import pandas as pd# 设置 Matplotlib 使用 'SimHei'(黑体)字体,以支持中文显示
plt.rcParams['font.sans-serif'] = ['SimHei']# 设置 Matplotlib 正常显示负号(避免负号显示为方框)
plt.rcParams['axes.unicode_minus'] = False# 定义 CSV 文件的路径
csv_file_path = './data/物流公司物流费用.csv'# 使用 pandas 读取指定路径的 CSV 文件,并将数据加载为 DataFrame(二维表格结构)
df = pd.read_csv(csv_file_path)# 从 DataFrame 中提取 '月份' 列作为 x 轴数据(如 1, 2, 3, ..., 12)
x = df['月份']# 提取三家公司(A公司、B公司、C公司)的物流费用数据,作为堆叠面积图的三个数据系列
y1 = df['A公司'] # A 公司每月的物流费用
y2 = df['B公司'] # B 公司每月的物流费用
y3 = df['C公司'] # C 公司每月的物流费用# 绘制堆叠面积图(Stacked Area Plot)
# x:横轴为月份
# y1, y2, y3:三个公司的费用数据,依次从底部向上堆叠显示
# 所有公司数据叠加后,可以直观看出总费用趋势及各公司贡献比例
plt.stackplot(x, y1, y2, y3)# 显示绘制完成的图表窗口
plt.show()
绘制的图形如下图所示:
5. 绘制直方图
5.1 直方图介绍
直方图用于展示数据的分布情况,它将数据划分为多个连续的区间( bins ),并统计每个区间内数据的数量,以柱形的形式展示出来。Matplotlib 中使用plt.hist()
函数来绘制直方图。
5.2 plt.hist()函数介绍
plt.hist()
是 Matplotlib 中用于绘制 直方图(Histogram) 的函数,主要用于展示数据的分布情况。它可以将一组数据按照指定的区间(bins)划分,统计每个区间内数据出现的频数或频率。
参数名 | 描述 | 取值示例 |
---|---|---|
x | 输入数据,通常是一维数组或列表 | [1, 2, 2, 3, 4, 5] |
bins | 指定柱子数量或边界点,决定数据如何分组 | 10 (10个柱子)、[0, 2, 4, 6] (自定义分组) |
range | 数据范围(最小值、最大值),超出范围的数据将被忽略 | (0, 10) |
density | 如果为 True ,则显示概率密度(面积和为1)而非频数 | True , False |
color 或 facecolor | 设置柱子的填充颜色 | 'blue' , '#FFA500' |
edgecolor | 设置柱子边缘颜色 | 'black' , 'white' |
alpha | 设置柱子透明度(0.0 完全透明,1.0 不透明) | 0.5 , 0.7 |
histtype | 设置直方图类型 | 'bar' (默认)、'barstacked' 、'step' 、'stepfilled' |
align | 控制柱子对齐方式 | 'left' , 'mid' (默认)、'right' |
orientation | 设置直方图方向 | 'vertical' (默认)、'horizontal' |
rwidth | 设置柱子之间的相对宽度(0~1),值越小柱子越窄 | 0.8 |
log | 如果为 True ,y轴使用对数刻度 | True , False |
label | 设置图例标签,用于 plt.legend() 显示 | '数据分布' |
stacked | 如果为 True ,多个数据集将堆叠显示 | True , False |
5.3 绘制直方图
import matplotlib.pyplot as plt# 设置中文字体支持和负号正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False# 30名学生的数学成绩数据
scores = [58, 62, 65, 67, 68, 70, 72, 72, 73, 74,75, 75, 76, 76, 77, 78, 78, 79, 80, 81,82, 83, 84, 85, 86, 87, 88, 90, 92, 95]# 使用给定的成绩数据绘制直方图
plt.hist(x=scores)# 显示图表
plt.show()
绘制的图形如下图所示:
5.4 示例:绘制薪资分布直方图
部分数据如下图所示,需要根据这个数据绘制薪资分布直方图。
实现代码如下图所示:
import matplotlib.pyplot as plt
import pandas as pd# 定义CSV文件路径,该文件包含了清洗后的职位数据集
csv_file_path = './data/cleaned_position_dataset.csv'# 使用pandas读取CSV文件,并将其内容加载到一个DataFrame(数据帧)中
df = pd.read_csv(csv_file_path)# 根据DataFrame中的'salary_lower'列的数据绘制直方图。
# 这个直方图将展示最低薪资的分布情况。
plt.hist(x=df['salary_lower'])# 显示绘制好的图表
plt.show()
绘制的图形如下图所示:
6. 绘制饼图
6.1 饼图介绍
饼图用于展示整体中各部分的占比情况,它将一个圆形划分为多个扇形区域,每个扇形的面积大小与该部分在整体中所占的比例相对应,通过扇形的大小直观地呈现各部分与整体以及各部分之间的比例关系。Matplotlib 中使用plt.pie()
函数来绘制饼图。
6.2 plt.pie()函数介绍
matplotlib.pyplot.pie()
是 Matplotlib 中用于绘制 饼图(Pie Chart) 的函数。饼图是一种常用于展示 类别占比 的图表类型,适合表现部分与整体之间的关系。
参数名 | 描述 | 取值示例 |
---|---|---|
x | 一维数组或列表,表示每个扇区的数值大小(将自动转换为百分比) | [15, 30, 45, 10] |
labels | 每个扇区的标签(类别名称),用于图例或直接显示在图中 | ['A', 'B', 'C', 'D'] |
explode | 设置某些扇区是否“突出显示”,值越大离中心越远 | (0, 0.1, 0, 0) (第二个扇区突出) |
colors | 自定义每个扇区的颜色,可以是颜色名称或十六进制代码 | ['red', 'blue', 'green', 'orange'] |
autopct | 显示每个扇区所占百分比,可使用格式化字符串 | '%1.1f%%' (显示一位小数的百分比) |
pctdistance | 设置百分比标签距离饼图中心的距离(0表示圆心,1表示边缘) | 0.5 (在饼图中间显示) |
shadow | 是否为饼图添加阴影效果 | True 或 False |
startangle | 设置饼图起始绘制角度(默认从 x 轴正方向开始) | 90 (从 y 轴正方向开始绘图) |
radius | 设置饼图的半径,默认为 1 | 1.2 (放大饼图) |
counterclock | 是否按逆时针方向绘制扇区 | True (默认)、False (顺时针) |
wedgeprops | 字典类型,用于设置饼图扇区的属性,如边框、宽度等 | {'edgecolor': 'black', 'linewidth': 1} |
textprops | 字典类型,设置标签文字的样式,如字体大小、颜色等 | {'fontsize': 10, 'color': 'black'} |
labeldistance | 设置标签距离饼图中心的距离(默认为 1.1) | 1.2 (标签离饼图更远) |
center | 设置饼图的中心坐标(默认为 (0, 0)) | (0.5, 0.5) |
rotatelabels | 是否旋转标签以匹配扇区角度 | True 或 False |
6.3 绘制饼图
6.3.1 绘制饼图
# 导入matplotlib.pyplot模块,用于绘图
import matplotlib.pyplot as plt# 数据列表x表示每个部分的大小或贡献度。这里作为饼图各部分的比例。
x = [25, 35, 20, 20, 50]# 标签列表labels用于标记饼图中每个部分代表的数据类别。
labels = ['A', 'B', 'C', 'D', 'E']# 使用plt.pie()函数绘制饼图:
# 参数x指定数据列表,决定了饼图各个扇区的大小;
# labels参数指定与x列表对应的数据标签;
# autopct参数设置为'%.1f%%',用于在饼图上显示百分比数值,保留一位小数。
plt.pie(x=x, labels=labels, autopct='%.1f%%')# 调用plt.show()函数显示图形结果。
plt.show()
绘制的图形如下图所示:
6.3.2 绘制圆环图
# 导入matplotlib.pyplot模块,用于绘图
import matplotlib.pyplot as plt# 数据列表x表示每个部分的大小或贡献度。这里作为饼图各部分的比例。
x = [25, 35, 20, 20, 50]# 标签列表labels用于标记饼图中每个部分代表的数据类别。
labels = ['A', 'B', 'C', 'D', 'E']# 使用plt.pie()函数绘制饼图:
# 参数x指定数据列表,决定了饼图各个扇区的大小;
# labels参数指定与x列表对应的数据标签;
# autopct参数设置为'%.1f%%',用于在饼图上显示百分比数值,保留一位小数。
# wedgeprops参数通过字典{'width': 0.6}来指定饼图中每个楔子(扇区)的宽度,从而创建一个类似圆环的效果。
plt.pie(x=x, labels=labels, autopct='%.1f%%', wedgeprops={'width': 0.6})# 调用plt.show()函数显示图形结果。
plt.show()
绘制的图形如下图所示:
6.4 示例:绘制账单饼图
数据如下图所示,需要根据这个数据绘制账单饼图。
实现代码如下图所示:
# 导入matplotlib.pyplot模块,用于绘图功能。
import matplotlib.pyplot as plt# 导入pandas模块,并使用pd作为别名。Pandas是一个强大的数据处理和分析库。
import pandas as pd# 设置matplotlib的中文字体为SimHei(黑体),以确保中文标签可以正常显示。
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号'-'显示为方块的问题,通过设置'axes.unicode_minus'为False来实现。
plt.rcParams['axes.unicode_minus'] = False# 定义包含CSV文件路径的变量。这里假设账单数据存储在一个名为'账单.csv'的文件中。
csv_file_path = './data/账单.csv'# 使用pandas的read_csv函数读取CSV文件中的数据,并将其存储在一个DataFrame对象中。
df = pd.read_csv(csv_file_path)# 从DataFrame中提取'金额'列的数据,用于表示饼图各个部分的大小或贡献度。
x = df['金额']# 从DataFrame中提取'支出分类'列的数据,用作饼图各部分的标签,以便了解每个部分代表什么。
labels = df['支出分类']# 使用plt.pie()函数绘制饼图:
# 参数x指定数据列表,决定了饼图各个扇区的大小;
# labels参数指定与x列表对应的数据标签,帮助识别每个扇区所代表的类别;
# autopct参数设置为'%.1f%%',用于在饼图上显示百分比数值,保留一位小数。
plt.pie(x=x, labels=labels, autopct='%.1f%%')# 调用plt.show()函数显示图形结果。这是展示已创建图表的必要步骤。
plt.show()
绘制的图形如下图所示:
7. 绘制散点图
7.1 散点图和气泡图介绍
散点图用于展示两个变量之间的关系,它通过在平面直角坐标系中绘制大量的点,每个点的横纵坐标分别对应两个变量的取值,以此直观地呈现变量之间是否存在关联、关联的方向以及关联的强度。Matplotlib 中使用plt.scatter()
函数来绘制散点图。
气泡图用于展示三个变量之间的关系,它在散点图的基础上,通过点的大小来表示第三个变量的取值,即每个气泡的横纵坐标对应两个变量的数值,而气泡的大小则反映第三个变量的大小,从而能同时呈现三个变量之间的关联情况。Matplotlib 中绘制气泡图同样可以使用plt.scatter()
函数,通过设置s参数来指定气泡的大小。
7.2 plt.scatter()函数介绍
matplotlib.pyplot.scatter()
是 Matplotlib 中用于绘制 散点图(Scatter Plot) 的函数。散点图是一种常用的统计图表,用于展示 两个变量之间的关系,每个点的位置由一对数值(x 和 y)决定。
参数名 | 描述 | 取值示例 |
---|---|---|
x , y | 数据点的横纵坐标,必须为一维数组或列表 | [1, 2, 3, 4] , np.arange(10) |
s | 点的大小(可以是标量或与数据点数量相同的数组) | 50 (所有点大小一致)、[20, 40, 60, 80] (每个点大小不同) |
c | 点的颜色(可以是单色、颜色序列或与数据点数量相同的数值) | 'red' 、['red', 'blue'] 、[0.1, 0.5, 0.9] (用于颜色映射) |
marker | 点的形状(标记样式) | 'o' (圆形,默认)、's' (正方形)、'^' (三角形) |
cmap | 颜色映射表(当 c 是数值时,用于映射为颜色) | 'viridis' 、'plasma' 、'coolwarm' |
alpha | 设置点的透明度(0.0 完全透明,1.0 完全不透明) | 0.6 |
linewidths | 点的边框线宽(可以是标量或数组) | 1 、[0.5, 1.0, 1.5] |
edgecolors | 点的边框颜色 | 'black' 、'none' (无边框) |
vmin , vmax | 用于颜色映射的最小和最大值,控制颜色映射范围 | vmin=0 , vmax=100 |
norm | 用于将颜色数据归一化的对象,如 matplotlib.colors.Normalize | Normalize(vmin=0, vmax=100) |
plotnonfinite | 是否绘制 NaN 或 inf 值的点(默认为 False ) | True 、False |
7.3 绘制散点图
7.3.1 绘制散点图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 设置中文字体为黑体,以支持中文正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']# 设置正常显示负号
plt.rcParams['axes.unicode_minus'] = False# 身高数据(单位:cm)
heights = [155, 160, 165, 170, 175, 180, 185, 190, 195, 200]# 体重数据(单位:kg)
weights = [50, 54, 58, 62, 66, 70, 75, 80, 85, 90]# 绘制散点图,x轴为身高,y轴为体重
plt.scatter(x=heights, y=weights)# 显示绘制好的图表
plt.show()
绘制的图形如下图所示:
7.3.2 绘制气泡散点图
# 导入 matplotlib.pyplot 模块作为 plt,用于绘图
import matplotlib.pyplot as plt# 设置中文字体为 SimHei(黑体),以确保中文可以正常显示在图表上
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决坐标轴负号 '-' 显示为方块的问题,保证负数符号能够正常显示
plt.rcParams['axes.unicode_minus'] = False# 身高数据列表,单位为厘米(cm)
heights = [155, 160, 165, 170, 175, 180, 185, 190, 195, 200]# 体重数据列表,单位为千克(kg)
weights = [50, 54, 58, 62, 66, 70, 75, 80, 85, 90]# 点的大小列表,数值越大点越大。这里用于控制散点图中每个点的大小
sizes = [10, 20, 30, 40, 50, 90, 150, 180, 190, 200]# 使用 scatter 方法绘制散点图,x轴是身高,y轴是体重,s 参数表示每个点的大小由 sizes 列表控制
plt.scatter(x=heights, y=weights, s=sizes)# 展示图表
plt.show()
绘制的图形如下图所示:
7.4 示例:绘制车速与制动距离散点图
数据如下图所示,需要根据这个数据绘制车速与制动距离散点图。
实现代码如下图所示:
# 导入绘图库 matplotlib.pyplot,用于绘制图表
import matplotlib.pyplot as plt# 导入数据处理库 pandas,用于读取和处理数据
import pandas as pd# 设置中文字体为 SimHei(黑体),确保图表中可以正常显示中文
plt.rcParams['font.sans-serif'] = ['SimHei']# 设置正常显示负号,防止负号显示为小方块
plt.rcParams['axes.unicode_minus'] = False# 定义CSV文件路径,存储的是车速与制动距离的数据
csv_file_path = './data/车速与制动距离.csv'# 使用 pandas 读取CSV文件数据,并保存为 DataFrame 格式
df = pd.read_csv(csv_file_path)# 使用 scatter 函数绘制散点图:
# - x轴数据为车速(df['车速'])
# - y轴数据为制动距离(df['制动距离'])
plt.scatter(x=df['车速'], y=df['制动距离'])# 显示绘制好的图表
plt.show()
绘制的图形如下图所示:
8. 绘制箱形图
8.1 箱形图介绍
箱形图用于展示数据的分布特征,它通过箱体、须线和异常值等元素,直观呈现数据的集中趋势、离散程度以及异常情况。具体来说,它以箱体体现数据的四分位数范围,用须线展示数据的正常分布区间,将超出须线范围的数据标记为异常值,从而全面概括数据的分布状态。Matplotlib 中使用plt.boxplot()
函数来绘制箱形图。
8.2 plt.boxplot()函数介绍
matplotlib.pyplot.boxplot()
是 Matplotlib 中用于绘制 箱型图(Boxplot,又称箱线图、盒须图) 的函数。它是一种用于显示数据分布情况的统计图表,能够清晰地展示数据的 中位数、上下四分位数、异常值 等统计信息,非常适合用于分析数据的离散程度和识别异常值。
参数名 | 描述 | 取值示例 |
---|---|---|
x | 输入数据,可以是一个列表、数组或包含多个数据集的列表的列表 | [data1, data2] |
notch | 是否绘制缺口(表示中位数的置信区间) | True 或 False |
sym | 异常值(离群点)的标记符号,若为 '' 则不显示异常值 | 'o' 、'+' 、'' |
vert | 箱线图是否垂直显示 | True (默认,垂直)、False (水平) |
whis | 控制须的范围,默认为 1.5 倍四分位距(IQR) | 1.5 、3 、或一个表示上下限的列表 [lower, upper] |
positions | 设置每个箱型图在 x 轴上的位置 | [1, 2, 4, 5] |
widths | 控制箱体的宽度 | 0.5 、[0.3, 0.5] |
patch_artist | 是否填充箱体颜色 | True (填充颜色)、False (默认,空心) |
meanline | 是否用线表示均值(与 showmeans 配合使用) | True 、False |
showmeans | 是否显示均值 | True 、False |
showcaps | 是否显示上下边缘的横线(帽线) | True 、False |
showbox | 是否显示箱体 | True 、False |
showfliers | 是否显示异常值(离群点) | True (默认)、False |
boxprops | 设置箱体样式(颜色、线宽等) | {'color': 'black', 'linewidth': 2} |
whiskerprops | 设置须的样式 | {'color': 'red', 'linestyle': '--'} |
flierprops | 设置异常值点的样式 | {'marker': 'o', 'color': 'r'} |
medianprops | 设置中位数线的样式 | {'color': 'green', 'linewidth': 2} |
meanprops | 设置均值点或线的样式 | {'marker': 'D', 'markerfacecolor': 'blue'} |
8.3 绘制箱形图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 设置中文字体为 SimHei(黑体),确保图表中可以正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 构造三组示例数据,用于绘制箱线图
data1 = [-5, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 30] # 第一组数据
data2 = [-8, 3, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 35] # 第二组数据
data3 = [-9, 5, 8, 11, 15, 19, 22, 25, 28, 30, 33, 35, 50] # 第三组数据# 将三组数据放入一个列表中,作为箱线图的输入数据
data = [data1, data2, data3]# 绘制箱线图(boxplot),用于展示每组数据的分布情况和异常值
# 默认会显示上下四分位数、中位数、异常值等统计信息
plt.boxplot(data)# 显示绘制好的箱线图
plt.show()
绘制的图形如下图所示:
8.4 示例:绘制发电量箱形图
数据如下图所示,需要根据这个数据绘制发电量箱形图。
实现代码如下图所示:
# 导入 matplotlib.pyplot 模块,用于绘图操作
import matplotlib.pyplot as plt# 导入 pandas 模块,用于数据处理与分析,使用 pd 作为别名
import pandas as pd# 设置中文字体为 SimHei(黑体),确保图表中可以正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义 CSV 文件路径,指向包含“全国发电量”数据的文件
csv_file_path = './data/全国发电量.csv'# 使用 pandas 的 read_csv 函数读取 CSV 文件,并将内容加载到一个 DataFrame 对象 df 中
df = pd.read_csv(csv_file_path)# 使用 pandas 的 boxplot 方法绘制箱线图:
# - column='发电量(亿千瓦时)' 表示要分析的数值列
# - by='年份' 表示按照“年份”分组绘制箱线图,即每个年份对应一个箱型
df.boxplot(column='发电量(亿千瓦时)', by='年份')# 显示绘制好的箱线图
plt.show()
绘制的图形如下图所示:
9. 绘制雷达图
9.1 雷达图介绍
雷达图用于展示多个维度数据的综合情况,它以一个中心点为原点,向四周延伸出多个坐标轴(每个坐标轴代表一个数据维度),将同一组数据在不同维度上的取值连接成多边形,以此直观地呈现数据在各个维度上的分布特征以及不同组数据之间的差异。
9.2 plt.polar()函数介绍
matplotlib.pyplot.polar()
是一个便捷函数,用于在 极坐标系(Polar Coordinate System) 中绘制曲线。极坐标使用 角度(θ) 和 半径(r) 来表示点的位置,适用于周期性数据、方向性数据或圆形分布的可视化。
参数名 | 描述 | 取值示例 |
---|---|---|
theta | 角度数组(单位:弧度),表示每个点的方向 | np.linspace(0, 2*np.pi, 100) |
r | 半径数组,表示每个点到原点的距离 | [1, 1.5, 1, 0.5] |
s | 点的大小(用于散点图) | 50 |
c | 点的颜色(可用于颜色映射) | 'red' 、[0.1, 0.5, 0.9] |
marker | 标记样式(如 'o' , 's' , '^' ) | 'o' (圆形)、'x' |
cmap | 颜色映射表,当 c 为数值时使用 | 'viridis' 、'hsv' |
alpha | 透明度 | 0.7 |
linewidths | 线宽(用于线图)或边框宽度 | 2 |
edgecolors | 边框颜色 | 'black' 、'none' |
**kwargs | 其他传递给 plot() 或 scatter() 的参数 | linestyle='--' , label='曲线1' |
9.3 绘制雷达图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 导入 numpy 模块,用于数值计算,特别是角度和数组操作
import numpy as np# 设置中文字体为 SimHei(黑体),确保图表中的中文标签可以正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义极坐标的角度数组(theta),单位为弧度
# 从 0 开始,分别对应上、左、下、右四个方向,最后回到 0 形成闭合图形
theta = np.array([0, np.pi / 2, np.pi, 3 * np.pi / 2, 0])
print(np.pi)
# 定义每个方向上的半径值(r),这里所有方向的值都为 6,表示一个正方形(或菱形)轮廓
r = [6, 6, 6, 6, 6]# 创建极坐标图(雷达图的基础)
plt.polar(theta, r)# 定义雷达图各轴的标签(维度名称)
# 注意:np.array 中第一个元素为 None,是因为 matplotlib 极坐标默认从 0° 开始,这里跳过第一个标签位置
radar_labels = [None, '维度(B)', '维度(C)', '维度(D)', '维度(A)']# 设置极坐标的角度网格标签(将弧度转换为角度,并设置对应的文字标签)
plt.thetagrids(theta * 180 / np.pi, radar_labels)# 填充雷达图内部区域,增加可视化效果
# alpha=0.3 表示填充颜色的透明度(30% 不透明)
plt.fill(theta, r, alpha=0.3)# 显示绘制好的雷达图
plt.show()
绘制的图形如下图所示:
9.4 示例:绘制霍兰德职业兴趣测试雷达图
数据如下图所示,需要根据这个数据绘制霍兰德职业兴趣测试雷达图。
实现代码如下图所示:
# 导入必要的库:numpy用于数值计算,matplotlib.pyplot用于绘图,pandas用于数据处理
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd# 设置图片清晰度(DPI),以提高图像质量
plt.rcParams['figure.dpi'] = 300# 设置中文字体为 SimHei(黑体),确保图表中的中文标签可以正常显示
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号在图表中正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义CSV文件路径,该文件存储的是霍兰德职业兴趣测试的数据
csv_file_path = './data/霍兰德职业兴趣测试.csv'# 使用 pandas 的 read_csv 函数读取CSV文件,并将其转换为DataFrame格式以便于操作
df = pd.read_csv(csv_file_path)# 将DataFrame中的'维度'列提取出来作为雷达图的标签
radar_labels = df['维度'].tolist()# 删除DataFrame中的'维度'列,保留其余数值作为雷达图的数据点;将DataFrame转换为列表形式
data = df.drop(columns='维度').values.tolist()# 计算每个维度对应的角度位置,使得这些角度均匀分布在圆周上
angles = np.linspace(0, 2 * np.pi, len(radar_labels), endpoint=False)# 添加第一个角度到数组末尾,使图形闭合
angles = np.concatenate((angles, [angles[0]]))# 用于将两个或多个数组连接在一起。
# 将数据数组的第一个元素添加到数组的末尾,使得绘制雷达图时,最后一个点能与第一个点连接,形成一个闭合的图形。
data = np.concatenate((data, [data[0]]))# 同样对标签进行操作,以保持标签和数据的一致性
radar_labels = np.concatenate((radar_labels, [radar_labels[0]]))# 创建极坐标图(雷达图)
plt.polar(angles, data)# 设置雷达图的角度网格线及对应的文本标签
plt.thetagrids(angles * 180 / np.pi, labels=radar_labels)# 填充雷达图内部区域,增加可视化效果。alpha 参数控制填充颜色的透明度
plt.fill(angles, data, alpha=0.25)# 展示绘制好的雷达图
plt.show()
绘制的图形如下图所示:
10. 绘制误差棒图
10.1 误差棒图介绍
误差棒图用于展示数据的测量误差或不确定性,它在数据点或柱形等元素的基础上,添加了表示误差范围的线段(误差棒),以此直观地呈现数据的可靠程度或变异范围。Matplotlib 中可以使用plt.errorbar()
函数绘制误差棒图,也可在plt.bar()等函数中通过参数设置添加误差棒。
10.2 plt.errorbar()函数介绍
matplotlib.pyplot.errorbar()
是 Matplotlib 中用于绘制 带误差棒的图表(Error Bar Plot) 的函数。它常用于展示数据点的 不确定性、误差范围或置信区间,非常适合用于科学实验、统计分析、数据可视化等场景。
参数名 | 描述 | 常见取值示例 |
---|---|---|
x , y | 数据点的横纵坐标,必须为一维数组或列表 | [1, 2, 3, 4] , np.arange(10) |
xerr , yerr | x 或 y 方向的误差值,可以是标量(所有点相同误差)或数组(每个点不同误差) | 0.5 (固定误差)、[0.1, 0.2, 0.3, 0.4] (每个点不同误差) |
fmt | 数据点的样式格式字符串,与 plt.plot() 中的 fmt 相同 | 'o' (圆形点)、's-' (正方形连线)、'rx' (红色叉号) |
ecolor | 误差棒的颜色(默认与数据点一致) | 'red' , 'black' |
elinewidth | 误差棒的线宽 | 2 |
capsize | 误差棒两端帽子的宽度(用于更清晰显示误差范围) | 5 |
barsabove | 是否将误差棒绘制在数据点/线之上 | True 、False |
lolims , uplims | 设置 y 方向的下限或上限误差(仅显示一半误差棒) | True |
xlolims , xuplims | 设置 x 方向的下限或上限误差 | True |
errorevery | 控制每隔多少个点绘制误差棒(用于数据点太多时简化显示) | 2 (每隔一个点绘制一次) |
10.3 绘制误差棒图
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt# 设置中文字体为 SimHei(黑体),确保中文标签可以正常显示(可选)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义 x 轴数据,表示横坐标位置
x = [1, 2, 3, 4, 5]# 定义 y 轴数据,表示每个 x 值对应的测量值或平均值
y = [25, 32, 33, 26, 25]# 定义误差数据,表示每个 y 值对应的误差范围(上下对称)
yerr = [0.5, 0.4, 0.6, 1, 0.7]# 使用 errorbar 函数绘制带误差棒的图表:
# - x: 横坐标数据
# - y: 纵坐标数据(实际值)
# - yerr: 每个点的误差值(可为单个数字、列表或数组)
# - elinewidth: 误差棒的线宽
# - capsize: 误差棒两端帽子(横线)的长度
# - capthick: 误差棒帽子的线宽
plt.errorbar(x=x, y=y, yerr=yerr, elinewidth=2, capsize=5, capthick=2)# 显示绘制好的图形
plt.show()
绘制的图形如下图所示:
10.4 示例:绘制城市人口增长误差棒图
数据如下图所示,需要根据这个数据绘制城市人口增长误差棒图。
实现代码如下图所示:
# 导入 matplotlib.pyplot 模块,用于绘图
import matplotlib.pyplot as plt
# 导入 pandas 模块,使用其强大的数据处理能力
import pandas as pd# 设置中文字体为 SimHei(黑体),确保中文标签可以正常显示(可选)
plt.rcParams['font.sans-serif'] = ['SimHei']# 解决负号 '-' 显示为方块的问题,保证负号正常显示
plt.rcParams['axes.unicode_minus'] = False# 定义CSV文件路径,该文件存储的是城市人口增长的数据
csv_file_path = './data/城市人口增长.csv'# 使用 pandas 的 read_csv 函数读取CSV文件,并将其转换为DataFrame格式以便于操作
df = pd.read_csv(csv_file_path)# 从 DataFrame 中提取年份列并转换为列表,作为 x 轴数据
x = df['年份'].tolist()# 提取城市A的总人口数列并转换为列表,作为第一个数据序列的 y 轴数据
y = df['城市A_总人口数(人)'].tolist()# 提取城市A的人口标准差列,移除文本“±”,转换为整型,并转换为列表,作为第一个数据序列的误差棒数据
yerr = df['城市A_人口标准差(人)'].apply(lambda x: x.replace('±', '')).astype(int).tolist()# 提取城市B的总人口数列并转换为列表,作为第二个数据序列的 y 轴数据
y2 = df['城市B_总人口数(人)'].tolist()# 提取城市B的人口标准差列,移除文本“±”,转换为整型,并转换为列表,作为第二个数据序列的误差棒数据
yerr2 = df['城市B_人口标准差(人)'].apply(lambda x: x.replace('±', '')).astype(int).tolist()# 绘制带误差棒的城市A人口变化图表
plt.errorbar(x=x, y=y, yerr=yerr, capsize=3)
# 绘制带误差棒的城市B人口变化图表
plt.errorbar(x=x, y=y2, yerr=yerr2, capsize=3)# 设置 y 轴刻度值不以科学记数法显示,而是以普通数字格式显示
plt.ticklabel_format(style='plain', axis='y')# 显示绘制好的图形
plt.show()
绘制的图形如下图所示: