建议先阅读我之前的Python数据处理以及Python专栏中的博客,掌握一定的Python前置知识后再阅读本文,链接如下:

Python_梦想是成为算法高手的博客-CSDN博客

带你从入门到精通——Python数据处理(一. 环境介绍与NumPy入门)-CSDN博客

带你从入门到精通——Python数据处理(二. NumPy中数组的基本操作)-CSDN博客

带你从入门到精通——Python数据处理(三. NumPy中数组的运算)-CSDN博客

带你从入门到精通——Python数据处理(四. Pandas入门)-CSDN博客

带你从入门到精通——Python数据处理(五. Pandas中的索引、赋值、排序和运算)-CSDN博客

带你从入门到精通——Python数据处理(六. Pandas中文件的读写操作)-CSDN博客

带你从入门到精通——Python数据处理(七. Pandas中数据的增删改查)-CSDN博客

带你从入门到精通——Python数据处理(八. Pandas中的缺失值处理和数据合并)-CSDN博客

带你从入门到精通——Python数据处理(九. Pandas中的分组聚合和透视)-CSDN博客

带你从入门到精通——Python数据处理(十. Pandas中的融合和向量化字符串函数)-CSDN博客

目录

十一. Matplotlib

11.1 Matplotlib概述

11.2 Matplotlib的绘图流程

11.3 常见图形的绘制

11.3.1 折线图

11.3.2 柱形图

11.3.3 直方图

11.3.4 饼图

11.3.5 散点图

11.4 多图像绘制

11.4.1 在同一坐标系下的多图像绘制

11.4.2 在不同坐标系下的多图像绘制


十一. Matplotlib

11.1 Matplotlib概述

        Matplotlib是Python中的一个能够生成高质量图表的绘图库,也是一种常用的可视化工具,广泛应用于数据可视化、科学研究等领域,使用Matplotlib生成的可视化图表能够更加直观地呈现数据,使得数据更加客观、更具说服力

11.2 Matplotlib的绘图流程

        Matplotlib的绘图流程可以分为以下三步:

        第一步:导入matplotlib.pyplot模块并使用plt.figure方法创建画布,具体示例如下:

import matplotlib.pyplot as plt

plt.figure(figsize=(6.4, 4.8), dpi=100)
# 参数figsize用于指定图形的尺寸,单位是英寸,需传入一个元组
# 参数dpi用于指定图形的分辨率(每英寸的像素点的数量)
# 该方法会返回一个figure对象

        第二步:使用plt.plot方法绘制图像(折线图),具体示例如下:

plt.plot(x, y)
# 上述格式默认生成一个折线图
# x为横轴数据,y为纵轴数据

        第三步:使用使用plt.show方法显示图像,具体示例如下:

plt.show()

        Matplotlib的图像结构如下:

11.3 常见图形的绘制

11.3.1 折线图

        折线图(Line Chart)指以折线的上升或下降来表示统计数量的增减变化的统计图,绘制方法如下:

import matplotlib.pyplot as plt

# 设置了Matplotlib的全局参数,解决中文乱码和负号显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"] # 设置字体为SimHei(黑体),以便支持中文显示。
plt.rcParams["axes.unicode_minus"] = False # 禁用Unicode负号,以避免负号显示异常。

plt.figure(figsize=(6.4, 4.8), dpi=100) # 创建画布
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]) # 绘制折线图

# 添加刻度信息
plt.xticks([1, 3, 5]) # 设置x轴刻度
plt.yticks([1, 4, 9, 16, 25], ['1 * 1', '2 * 2', '3 * 3', '4 * 4', '5 * 5']) 
# 设置y轴刻度和刻度对应的标签

# 添加标题信息
plt.title('折线图') # 指定图像标题
plt.xlabel('x坐标') # 指定x轴标题
plt.ylabel('y坐标') # 指定y轴标题

plt.grid() # 显示网格
plt.savefig('line_chart.png')
# 保存png格式的图片,必须在plt.show()之前执行,因为plt.show()会释放画布资源
# 如果在释放画布资源后保存图形,就会因为没有可用的画布导致保存的图像为空白
plt.show()

11.3.2 柱形图

        柱形图(Bar Chart)指通过垂直或水平的柱形(条形)来表示各个离散类别的值的统计图,柱形的高度或长度与数值大小成正比,绘制方法如下:

import matplotlib.pyplot as plt

plt.figure(figsize=(6.4, 4.8), dpi=100)
categories = ['A', 'B', 'C', 'D']
values = [3, 7, 5, 4]
plt.bar(categories, values, width=0.8, color='blue')  # 绘制蓝色柱状图
# 参数width用于指定柱的宽度,参数color用于指定柱的颜色
plt.title("Bar Chart")  # 设置图像标题
plt.xlabel("Categories")  # 设置X轴标题
plt.ylabel("Values")  # 设置Y轴标题
plt.show()  # 显示图表

11.3.3 直方图

        直方图(Histogram)指使用一系列高度不等的纵向条纹或线段来表示连续数据分布的情况的统计图,直方图将数据分成若干个连续区间,每个柱子代表一个区间内的数据频数或频率,绘制方法如下:

import matplotlib.pyplot as plt
import numpy as np

# 生成长度为1000的、在[0, 10)区间内的一维随机整数数组
data = np.random.randint(0, 10, 1000)
# 生成画布
plt.figure(figsize=(6.4, 4.8), dpi=100)
# 绘制直方图
plt.hist(data, bins=5, color='red')
# 参数bins=5表示将数据按值域等分成5个区间,用于统计数据在每个区间内的频率
# 参数color='red'表示设置直方图条形为红色
# 添加标题
plt.title("Histogram")
plt.xlabel("Value")
plt.ylabel("Frequency")
plt.grid() # 添加网格线
plt.show()

11.3.4 饼图

        饼图(Pie Chart)用于展示各个类别在整体中的占比,饼图将一个圆形分成多个扇形,每个扇形代表一个类别,每个扇形的大小与其所代表类型的数据大小成正比,绘制方法如下:

import matplotlib.pyplot as plt

plt.figure(figsize=(6.4, 4.8), dpi=100)
sizes = [25, 35, 25, 15]
labels = ['Category A', 'Category B', 'Category C', 'Category D']
plt.pie(sizes, labels=labels)  # 绘制饼图,参数labels用于设置标签名
plt.title("Pie Chart")  # 设置图表标题
plt.show()  # 显示图表

11.3.5 散点图

        散点图(Scatter Plot)使用两组数据构成多个坐标点,通常用于展示两组数据之间的关系,二维坐标系中的横轴和纵轴分别代表两个变量的值,绘制方法如下:

import matplotlib.pyplot as plt

plt.figure(figsize=(6.4, 4.8), dpi=100)
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]
plt.scatter(x, y, color='green')  # 绘制绿色散点图
plt.title("Scatter Plot")  # 设置图表标题
plt.xlabel("X-axis")  # 设置X轴标签
plt.ylabel("Y-axis")  # 设置Y轴标签
plt.show()  # 显示图表

11.4 多图像绘制

11.4.1 在同一坐标系下的多图像绘制

        直接多次使用plt.plot方法(也可使用plt.bar、plt.hist等其他绘图方法,但不能多次使用plt.pie方法,会导致图像显示错误)即可完成在同一坐标系下的多图像绘制,示例如下:

import matplotlib.pyplot as plt

# 解决中文乱码和负号显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

plt.figure() # 创建画布
plt.plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]) # 绘制y = x * x的折线图
plt.plot([2, 4, 6, 8, 10], [2, 4, 6, 8, 10], linestyle='--') # 绘制y = x的折线图
# 参数linestyle参数用于指定折线样式,默认为实线

plt.title('折线图') # 指定图像标题
plt.xlabel('x坐标') # 指定x轴标题
plt.ylabel('y坐标') # 指定y轴标题

plt.legend(['y = x * x', 'y = x']) # 添加图例,需要传入一个图例标签列表
plt.show()

11.4.2 在不同坐标系下的多图像绘制

        使用plt.subplots方法即可创建多个子图对象分别用于绘制不同的图像,具体使用方法和示例如下:

import matplotlib.pyplot as plt

# 解决中文乱码和负号显示问题
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams["axes.unicode_minus"] = False

# 创建一个2行2列总计4个子图的画布并返回figure对象和坐标系对象
# 对坐标系对象使用索引即可访问各个子图对象
fig, axes = plt.subplots(2, 2)

axes[0, 0].plot([1, 2, 3, 4, 5], [1, 4, 9, 16, 25]) # 绘制折线图1

axes[0, 0].set_xticks([1, 3, 5]) # 设置子图x轴刻度
axes[0, 0].set_yticks([1, 4, 9, 16, 25], ['1 * 1', '2 * 2', '3 * 3', '4 * 4', '5 * 5'])
# 设置子图y轴刻度和刻度对应的标签

axes[0, 0].set_title("折线图") # 设置子图标题
axes[0, 0].set_xlabel("x轴") # 设置子图x轴标题
axes[0, 0].set_ylabel("y轴") # 设置子图y轴标题

axes[0, 0].grid() # 显示子图网格线
axes[0, 0].legend(['折线图']) # 添加子图图例

axes[0, 1].scatter([1, 6, 2, 4, 5], [3, 9, 2, 8, 10])
axes[0, 1].set_title("散点图")

axes[1, 0].bar(['A', 'B', 'C', 'D'], [10, 30, 25, 15])
axes[1, 0].set_title("柱状图")

axes[1, 1].pie([1, 2, 3, 4], labels=['A', 'B', 'C', 'D'], autopct='%1.1f%%')
# 参数autopct表示添加饼图中每个扇区的百分比,%1.1f代表格式化字符串表示
# 两个%%代表前一个%号用于转义后一个%号,即只显示一个%号
axes[1, 1].set_title("饼图")

plt.show()

        注意:上述方法中设置子图刻度和子图标题的方法与一般情况下设置刻度和标题的方法略有不同,上述方法使用axes.set_方法名()设置子图刻度和子图标题,而一般情况下使用plt.方法名()设置刻度和标题。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐