一、引言
Matplotlib是Python生态系统中最为核心和广泛使用的数据可视化库,它为用户提供了强大的二维图形绘制能力,其设计哲学在于以简洁的代码创建出具有出版物质量的静态、交互乃至动态的图表。
在功能上,Matplotlib不仅支持包括折线图、柱状图、散点图、直方图、饼图在内的多种基础图表类型,还允许用户对图表的每一个视觉元素——如坐标轴、图例、标签、线条、颜色和文本——进行像素级精度的细致控制。这种高度的可定制性使其能够满足从快速数据探索到复杂学术图表绘制的各类需求。
作为许多其他高级可视化库(如Pandas、Seaborn)的底层引擎,Matplotlib构成了Python数据科学栈不可或缺的一环,是数据分析和科学研究领域进行有效沟通与洞察发现的必备工具。
二、 环境初始化与核心概念解析
(1)环境配置
在使用Matplotlib之前,需要先确保它已被安装在你的Python环境中。最常用的方法是使用pip包管理器
pip install matplotlib
#在Python社区,为了代码的简洁和一致性,大家普遍遵循一些导入惯例。
#Matplotlib的标准导入语句是:
import matplotlib.pyplot as plt
-
matplotlib是主库,包含了所有构建块和功能。 -
pyplot是一个子模块,它提供了一个类似于MATLAB的命令式接口,极大地简化了常见绘图任务的创建过程。你可以将其视为一个“快捷方式”集合。
#绘制线图和散点图
plot()
#绘制散点图
scatter()
#绘制垂直条形图和水平条形图
bar()
#绘制直方图
hist()
#绘制饼图
pie()
#绘制图像
imshow()
#创建子图
subplots()
三、图表元素的定制与美学提升
(1)核心信息标注
-
标题:告诉别人这个图是关于什么的
-
坐标轴标签:说明X轴和Y轴代表什么
-
图例:当有多条线时,说明每条线是什么
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, label='正弦波')
ax.set_title('我的第一个图表') # 加标题
ax.set_xlabel('时间') # X轴标签
ax.set_ylabel('振幅') # Y轴标签
ax.legend() # 显示图例
plt.show()
(2)视觉样式设计
颜色、线型、标记符号与透明度的自定义配置
fig, ax = plt.subplots()
# 一条漂亮的蓝色虚线,带圆圈标记
ax.plot(x, y,
color='blue', # 颜色
linestyle='--', # 线条样式:- 实线 -- 虚线 : 点线
linewidth=2, # 线条粗细
marker='o', # 数据点标记:o 圆圈 s 方块 ^ 三角形
markersize=4, # 标记大小
alpha=0.7) # 透明度(0-1之间)
plt.show()
(3)高效绘图实践
-
使用内置样式库快速实现图表风格的专业化切换
# 查看所有可用样式
print(plt.style.available)
# 使用内置样式(放在最开头)
plt.style.use('seaborn-v0_8') # 推荐这个,现代又专业
# 也可以用这些:
# plt.style.use('ggplot') # R语言风格
# plt.style.use('seaborn-whitegrid') # 白色网格
fig, ax = plt.subplots()
ax.plot(x, y, label='正弦波')
ax.set_title('用了样式的图表')
ax.set_xlabel('时间')
ax.set_ylabel('振幅')
ax.legend()
plt.show()
三、 基础图表类型的绘制与实践
(1)折线图:展现数据趋势与连续性变化
import matplotlib.pyplot as plt
# 简单例子:画一条线
x = [1, 2, 3, 4, 5]
y = [2, 4, 1, 5, 3]
plt.plot(x, y) # 就这一行,折线图出来了!
plt.show()
(2)柱状图:进行类别间的比较分析
python
# 比较不同水果的销量
水果 = ['苹果', '香蕉', '橙子']
销量 = [15, 12, 8]
plt.bar(水果, 销量) # 用bar()代替plot()
plt.show()
(3)散点图:探索变量间的相关性与分布模式
# 看学习时间和考试成绩的关系
学习时间 = [2, 5, 3, 8, 6, 1, 4]
考试成绩 = [65, 85, 70, 95, 80, 50, 75]
plt.scatter(学习时间, 考试成绩) # 用scatter()
plt.show()
(4)直方图与箱线图:揭示数据集的分布特征与异常值
# 看班级成绩分布
成绩 = [75, 82, 65, 90, 78, 85, 92, 60, 72, 88]
plt.hist(成绩) # 用hist()
plt.show()
#箱线图
plt.boxplot(成绩) # 用boxplot()
plt.show()
(5)饼图与面积图:表达整体与部分的构成关系
# 看班级男女比例
labels = ['男生', '女生']
sizes = [25, 20]
plt.pie(sizes, labels=labels) # 用pie()
plt.show()
五、 复杂布局
使用subplots方法创建与管理网格化布局
- 基础多子图
import matplotlib.pyplot as plt
# 创建1行2列的子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 4))
# 在第一个子图画折线图
ax1.plot([1, 2, 3, 4], [1, 4, 2, 3])
ax1.set_title('销售趋势')
# 在第二个子图画柱状图
ax2.bar(['A', 'B', 'C'], [30, 45, 25])
ax2.set_title('产品销量')
plt.tight_layout()
plt.show()
- 2×2网格子图
# 创建2行2列的子图
fig, axs = plt.subplots(2, 2, figsize=(10, 8))
# 在四个子图上分别画图
axs[0, 0].plot([1, 2, 3], [1, 2, 1])
axs[0, 0].set_title('折线图')
axs[0, 1].scatter([1, 2, 3], [1, 2, 1])
axs[0, 1].set_title('散点图')
axs[1, 0].bar(['X', 'Y', 'Z'], [3, 1, 2])
axs[1, 0].set_title('柱状图')
axs[1, 1].pie([30, 70], labels=['A', 'B'])
axs[1, 1].set_title('饼图')
plt.tight_layout()
plt.show()
2678



被折叠的 条评论
为什么被折叠?



