文章目录

  • 一、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() 函数的主要参数及其取值说明:

参数名参数类型常见取值说明
xarray-like 或 scalar例如 [1,2,3,4], np.arange(10)x轴数据,可以是列表、数组等。如果未提供,则使用默认的从0开始的索引序列。
yarray-like 或 scalar例如 [1,4,9,16], np.sin(x)y轴数据,必须提供。
fmtstring(格式字符串)'r', 'g--', 'bo', 'k^:'简写格式字符串,用于同时指定颜色、标记和线型。格式为 [color][marker][line]
colorcstring、tuple、matplotlib颜色'red', 'g', (0.5, 0.2, 0.7)设置线条颜色。
markerstring'o', 's', 'd', '^', '+'设置数据点的标记样式。
markersizemsfloat10设置标记的大小。
markerfacecolormfcstring、tuple'blue'设置标记的填充颜色。
markeredgecolormecstring、tuple'black'设置标记边缘的颜色。
markeredgewidthmewfloat2设置标记边缘的宽度。
linestylelsstring'-', '--', ':', '-.', ' '设置线条样式。
linewidthlwfloat2设置线条宽度。
alphafloat (0.0 ~ 1.0)0.5设置透明度,0为完全透明,1为不透明。
labelstring'sin(x)'设置图例标签。
scalex / scaleybooleanTrue是否根据数据自动调整x/y轴的缩放比例。
wherestring ('pre', 'post', 'mid')'pre'用于 step() 图,设置阶梯图的绘制方式。
solid_capstylestring'round', 'butt', 'projecting'设置线段末端的样式(实线)。
dash_capstylestring同上设置虚线末端的样式。
solid_joinstyle / dash_joinstylestring'miter', 'round', 'bevel'设置线段连接处的样式。
fillstylestring'full', 'left', 'right', 'bottom', 'top'设置标记的填充样式。
dataindexable objectpandas DataFrame提供一个数据源,可以结合 xy 使用列名。

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坐标如何对齐。可选值有centeredge。默认值为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坐标如何对齐。可选值有centeredge。默认值为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() 函数的参数介绍:

参数名描述取值示例
xx轴的数据,通常是一个一维数组或列表,表示每个数据点的位置range(5)[1, 2, 3, 4, 5]
y1, y2, ..., yn多个数据序列,表示堆叠的每一层数据,可以是多个一维数组或列表[2, 4, 6], [1, 3, 5]
labels为每个堆叠层设置标签,用于图例显示['A', 'B', 'C']
colorscolor设置每个堆叠层的颜色['red', 'blue', 'green']'#FFA500'
baseline设置堆叠的基线方式,影响堆叠层的排列方式'zero'(默认)、'sym''wiggle''weighted_wiggle'
edgecolor设置堆叠区域边缘的颜色'black''gray'
linewidthlw设置堆叠区域边缘线的宽度1.52
alpha设置堆叠区域的透明度(0.0完全透明,1.0不透明)0.50.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
colorfacecolor设置柱子的填充颜色'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是否为饼图添加阴影效果TrueFalse
startangle设置饼图起始绘制角度(默认从 x 轴正方向开始)90(从 y 轴正方向开始绘图)
radius设置饼图的半径,默认为 11.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是否旋转标签以匹配扇区角度TrueFalse

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.NormalizeNormalize(vmin=0, vmax=100)
plotnonfinite是否绘制 NaNinf 值的点(默认为 FalseTrueFalse

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是否绘制缺口(表示中位数的置信区间)TrueFalse
sym异常值(离群点)的标记符号,若为 '' 则不显示异常值'o''+'''
vert箱线图是否垂直显示True(默认,垂直)、False(水平)
whis控制须的范围,默认为 1.5 倍四分位距(IQR)1.53、或一个表示上下限的列表 [lower, upper]
positions设置每个箱型图在 x 轴上的位置[1, 2, 4, 5]
widths控制箱体的宽度0.5[0.3, 0.5]
patch_artist是否填充箱体颜色True(填充颜色)、False(默认,空心)
meanline是否用线表示均值(与 showmeans 配合使用)TrueFalse
showmeans是否显示均值TrueFalse
showcaps是否显示上下边缘的横线(帽线)TrueFalse
showbox是否显示箱体TrueFalse
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, yerrx 或 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是否将误差棒绘制在数据点/线之上TrueFalse
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()

绘制的图形如下图所示:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/93136.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/93136.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/93136.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【世纪龙科技】数字化技术解锁新能源汽车电驱动总成装调与检修

随着新能源汽车产业加速升级,电驱动总成装调与检修技术已成为职业院校汽车专业教学的核心挑战。传统实训模式面临设备投入高、更新周期长、高压操作安全隐患多、教学与产业需求脱节等现实问题,导致学生实践能力培养滞后于行业发展。如何通过数字化手段突…

springboot基于Java与MySQL库的健身俱乐部管理系统设计与实现

用户:注册,登录,健身教练,健身课程,健身器材,健身资讯,课程报名管理,教练预约管理,会员充值管理,个人中心管理员:登录,个人中心&#…

如何修改debian的ip地址

编辑配置文件: sudo nano /etc/network/interfaces修改内容(示例将 eth0 设为静态IP): auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4 #…

haproxy七层代理(知识点+相关实验部署)

目录 1.负载均衡介绍 1.1 什么是负载均衡 1.2 为什么用负载均衡 1.3 负载均衡类型 1.3.1 四层负载均衡 1.3.2 七层负载均衡 1.3.3 四层和七层的区别 2.haproxy简介 2.1 haproxy主要特性 2.2 haproxy的优点与缺点 3.haproxy的安装和服务信息 3.1 实验环境 3.1.1 hap…

【集合】JDK1.8 HashMap 底层数据结构深度解析

一、核心数据结构:为什么是 "数组 链表 红黑树"?​HashMap 的底层设计本质是用空间换时间,通过哈希表的快速定位特性,结合链表和红黑树处理冲突,平衡查询与插入效率。​1.1 基础容器:哈希桶数组…

【element-ui】HTML引入本地文件出现font找不到/fonts/element-icons.woff

文章目录目录结构问题复现解决办法目录结构 |-web|- public|- lib|- ...|- index.htmlindex.html <!DOCTYPE html> <html> <head><meta charset"UTF-8"><!-- import CSS --><link rel"stylesheet" href"./public/…

Windows|CUDA和cuDNN下载和安装,默认安装在C盘和不安装在C盘的两种方法

本篇文章将详细介绍在Windows操作系统中配置CUDA和cuDNN的步骤。通过本教程&#xff0c;您将能够轻松完成CUDA和cuDNN的安装、环境变量配置以及与深度学习框架&#xff08;如TensorFlow和PyTorch&#xff09;兼容性测试&#xff0c;从而为您的深度学习项目提供强大的硬件支持。…

Vue 项目动态接口获取翻译数据实现方案(前端处理语言翻译 vue-i18n)

在大型多语言项目中&#xff0c;将翻译数据硬编码在项目中往往不够灵活。通过接口动态获取翻译数据&#xff0c;并结合本地缓存提升性能&#xff0c;是更优的国际化实现方式。本文将详细介绍如何在 Vue 项目中实现这一方案。 方案优势 灵活性高&#xff1a;翻译内容更新无需修改…

Mybatis-plus多数据源

适用于多种场景&#xff1a;纯粹多库、 读写分离、 一主多从、 混合模式等目前我们就来模拟一个纯粹多库的一个场景&#xff0c;其他场景类似场景说明&#xff1a;我们创建两个库&#xff0c;分别为&#xff1a; mybatis_plus&#xff08;以前的库不动&#xff09;与my…

广东省省考备考(第五十六天7.25)——常识:科技常识(听课后强化训练)

错题解析解析解析解析解析解析解析解析解析标记题解析解析今日题目正确率&#xff1a;40%

RabbitMQ简述

RabbitMQ简述 RabbitMQ 是一个开源的 消息代理&#xff08;Message Broker&#xff09; 软件&#xff0c;实现了 高级消息队列协议&#xff08;AMQP&#xff09;&#xff0c;用于在分布式系统中存储、转发消息&#xff0c;支持异步通信、解耦服务、负载均衡和消息缓冲。 核心…

skywalking应用性能监控

1.skywalking描述 官方文档 SkyWalking 是一个开源的可观测性平台&#xff0c;用于收集、分析、汇总和可视化来自服务及云原生基础设施的数据。SkyWalking 为维护分布式系统的清晰视图提供了简便的方法&#xff0c;即使是在跨云环境中也能做到。它是一款专为云原生、基于容器的…

如何彻底清除服务器上的恶意软件与后门

清除服务器上的恶意软件与后门 是确保服务器安全的关键步骤。恶意软件和后门可能导致数据泄露、性能下降&#xff0c;甚至服务器被攻击者完全控制。以下是彻底清除恶意软件与后门的详细指南&#xff0c;包括 检测、清理、修复与预防 的步骤。1. 彻底清除恶意软件与后门的步骤1.…

Linux和Windows基于V4L2和TCP的QT监控

最近工作需要用QT做一个网络摄像头测试&#xff0c;简单记录&#xff1a;服务端&#xff0c;主机配置为Ubuntu&#xff0c;通过端口12345采集传输MJPEG格式图片windows客户端&#xff0c;QT Creator通过ip地址连接访问提前准备服务端需要安装QT5sudo apt-get install qt5-defau…

yolo格式

labelimg中的格式yolo格式id 框中心点X对于总图片的比例 框中心点Y对于总图片的比例 框X总长度对于总图片的比例 框Y总长度对于总图片的比例

Day 8-zhou R包批量安装小补充!!!

BiocManager::install(c(“S4Vectors”, “BiocGenerics”)) 以下是使用BiocManager安装S4Vectors和BiocGenerics包的详细步骤。这些步骤基于最新的Bioconductor和R版本&#xff08;R 4.5&#xff09;。 安装步骤安装BiocManager 如果你还没有安装BiocManager&#xff0c;可以使…

电商项目_核心业务_数据归档

无论采用哪种存储系统&#xff0c;数据查询的耗时取决于两个因素查找的时间复杂度数据总量查找的时间复杂度又取决于查找算法数据存储结构以Mysql存储的订单数据为例&#xff0c;随着业务的发展&#xff0c;数据量越来越大&#xff0c;对一些历史归档数据的查询&#xff0c;如果…

第十讲:stack、queue、priority_queue以及deque

目录 1、stack 1.1、stack的使用 1.2、stack的OJ题 1.2.1、最小栈 1.2.2、栈的压入弹出序列 1.2.3、逆波兰表达式求值 1.3、stack的模拟实现 2、queue 2.1、queue的使用 2.2、queue的OJ题 2.2.1、二叉树的层序遍历 2.3、queue的模拟实现 3、priority_queue 3.1、…

如何思考一个动态规划问题需要几个状态?

如何思考一个动态规划问题需要几个状态&#xff1f;第一步&#xff1a;思考 角色第二步&#xff1a;考虑 过去的影响第三步&#xff1a;画出状态转移图第四步&#xff1a;写出状态转移方程第五步&#xff1a;验证是否能覆盖所有路径 边界几个常见题目总结&#xff1a;第一步&a…

【每天一个知识点】生成对抗聚类(Generative Adversarial Clustering, GAC)

&#x1f4d8; 生成对抗聚类&#xff08;Generative Adversarial Clustering, GAC&#xff09; 一、研究背景与动机 聚类是无监督学习中的核心任务。传统方法如 K-means、GMM、DBSCAN 等难以适应高维、非线性、复杂结构数据。 生成对抗聚类&#xff08;GAC&#xff09; 融合…