欢迎来到 Python 基础入门 Day24!在今天的课程中,我们将聚焦于 Matplotlib 的高级可视化技巧,帮助你创建更加丰富和专业的图表。通过对数据的可视化,我们可以更直观地观察数据特性,从而做出更准确的分析与判断。
目录
- Matplotlib 的高级自定义功能
- 子图布局与多图显示
- 图表样式与配色方案
- 高级注释与交互功能
- 小结与练习
一、Matplotlib 的高级自定义功能
在基本的图表上,Matplotlib 提供了很多参数来自定义细节,比如标题、坐标轴标签、网格线等。
1.1 图表标题和坐标轴设置
import matplotlib.pyplot as plt
import numpy as np
# 示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建图表并设置标题和坐标轴
plt.plot(x, y, label="Sine Wave")
plt.title("Advanced Matplotlib Customization", fontsize=16, fontweight="bold")
plt.xlabel("X Axis", fontsize=12)
plt.ylabel("Y Axis", fontsize=12)
plt.legend()
plt.grid(True) # 添加网格线
plt.show()
1.2 设置轴的范围与刻度
可以通过 xlim()
和 ylim()
来调整坐标轴范围,也可以自定义刻度。
plt.plot(x, y, label="Sine Wave")
plt.xlim(0, 10) # 设置 X 轴范围
plt.ylim(-1.5, 1.5) # 设置 Y 轴范围
plt.xticks(np.arange(0, 11, 1)) # 自定义 X 轴刻度
plt.yticks(np.arange(-1.5, 2, 0.5)) # 自定义 Y 轴刻度
plt.grid(True)
plt.legend()
plt.show()
二、子图布局与多图显示
使用 plt.subplots()
可以在一个图表中显示多个子图,非常适合比较不同数据集。
2.1 创建简单的子图
fig, axes = plt.subplots(2, 1, figsize=(8, 6)) # 创建两行一列的子图
# 第一幅子图
axes[0].plot(x, np.sin(x), label="Sine")
axes[0].set_title("Sine Function")
axes[0].legend()
# 第二幅子图
axes[1].plot(x, np.cos(x), label="Cosine", color="red")
axes[1].set_title("Cosine Function")
axes[1].legend()
plt.tight_layout() # 自动调整布局
plt.show()
2.2 更复杂的子图布局
可以通过 gridspec
模块创建复杂的子图布局。
import matplotlib.gridspec as gridspec
# 创建子图布局
fig = plt.figure(figsize=(8, 6))
gs = gridspec.GridSpec(2, 2, figure=fig)
# 子图1
ax1 = fig.add_subplot(gs[0, 0])
ax1.plot(x, np.sin(x), label="Sine")
ax1.set_title("Sine Wave")
# 子图2
ax2 = fig.add_subplot(gs[0, 1])
ax2.plot(x, np.cos(x), label="Cosine", color="red")
ax2.set_title("Cosine Wave")
# 子图3(跨两列)
ax3 = fig.add_subplot(gs[1, :])
ax3.plot(x, np.tan(x), label="Tangent", color="green")
ax3.set_title("Tangent Wave")
ax3.set_ylim(-5, 5)
plt.tight_layout()
plt.show()
三、图表样式与配色方案
Matplotlib 提供了多种预定义样式,使图表更具美感。
3.1 应用样式
plt.style.use("seaborn-darkgrid") # 使用 seaborn-darkgrid 样式
plt.plot(x, y, label="Sine Wave")
plt.title("Styled Plot")
plt.legend()
plt.show()
3.2 自定义配色
可以通过 cmap
参数设置渐变颜色。
colors = plt.cm.viridis(np.linspace(0, 1, 10)) # 生成 10 种渐变颜色
for i, c in enumerate(colors):
plt.plot(x, y + i * 0.2, color=c, label=f"Line {i+1}")
plt.legend()
plt.title("Custom Colormap")
plt.show()
四、高级注释与交互功能
4.1 添加注释
通过 annotate()
可以在图表中添加注释。
plt.plot(x, y, label="Sine Wave")
plt.title("Annotation Example")
# 添加注释
plt.annotate("Local Max", xy=(np.pi / 2, 1), xytext=(2, 1.5),
arrowprops=dict(facecolor="black", arrowstyle="->"))
plt.legend()
plt.show()
4.2 交互式工具
利用 Matplotlib 的 widgets
模块,可以创建交互式控件。
from matplotlib.widgets import Slider
# 创建图表
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=0.25) # 为滑块留出空间
line, = plt.plot(x, y, lw=2)
# 添加滑块
ax_slider = plt.axes([0.25, 0.1, 0.65, 0.03])
slider = Slider(ax_slider, "Freq", 0.1, 2.0, valinit=1.0)
# 更新函数
def update(val):
freq = slider.val
line.set_ydata(np.sin(freq * x))
fig.canvas.draw_idle()
slider.on_changed(update)
plt.show()
五、小结与练习
今日总结:
- 学习了如何对图表进行高级自定义,包括标题、坐标轴和刻度设置。
- 探索了子图布局和复杂的多图显示。
- 使用了 Matplotlib 样式和配色方案美化图表。
- 学习了添加注释和交互功能。
今日练习:
- 使用随机数据,创建一张包含 4 个子图的布局,每个子图显示不同类型的曲线(如正弦、余弦等)。
- 应用不同的 Matplotlib 样式(如
ggplot
或seaborn-poster
),美化图表。 - 在图表上添加至少 3 个注释,用箭头指向关键点。
- 使用交互滑块调整正弦波的频率和振幅。
下一节预告:在 Day25 中,我们将学习 Seaborn 高级可视化工具,进一步提升数据的可视化效果。敬请期待!
今天的课程到此结束,感谢你的学习!如有疑问,欢迎讨论 😊。