趋近智
让我们将本章的知识付诸实践。你已经学会了如何添加标注、管理图例、调整布局、应用主题以及保存你的作品。现在,你将应用这些技术来改进一些基本图表,使它们更清晰、更具信息量,并可用于分享。
我们将逐步改进几种常见图表类型。请记住确保已导入绘图库:
import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import pandas as pd
# 用于练习的示例数据
x_line = np.linspace(0, 10, 50)
y1_line = np.sin(x_line)
y2_line = np.cos(x_line)
categories = ['Group A', 'Group B', 'Group C', 'Group D']
values = [15, 24, 19, 29]
x_scatter = np.random.rand(50) * 10
y_scatter = x_scatter + np.random.randn(50) * 2
highlight_x = x_scatter[10] # 选取一个点进行突出显示
highlight_y = y_scatter[10]
# 设置默认的Seaborn风格以获得更好的美观效果
sns.set_style("whitegrid")
让我们从一个显示两条线的简单折线图开始。默认图表缺少上下文 (context)。
初始图表:
plt.figure(figsize=(8, 4)) # 从设定图表大小开始
plt.plot(x_line, y1_line)
plt.plot(x_line, y2_line)
plt.show()
任务:
loc值('upper right','lower left'等)来寻找一个好的位置。改进后的图表代码:
# 1. 创建图表和轴
plt.figure(figsize=(8, 5)) # 略微调整了大小
# 2. 绘制数据并进行自定义
plt.plot(x_line, y1_line, color='#1f77b4', linestyle='-', label='sin(x)') # 蓝色实线
plt.plot(x_line, y2_line, color='#ff7f0e', linestyle='--', label='cos(x)') # 橙色虚线
# 3. 添加标题和标签
plt.title('正弦和余弦函数')
plt.xlabel('X值')
plt.ylabel('Y值')
# 4. 设置轴限制
plt.ylim(-1.5, 1.5)
# 5. 添加图例
plt.legend(loc='lower left') # 将图例放置在左下角
# 6. 显示图表
plt.show()
将改进后的图表与初始图表进行比较。添加的元素使其更容易理解该可视化所代表的内容。
现在我们来处理散点图。我们将添加一个标注来指出特定的数据点。
初始图表:
plt.figure(figsize=(7, 5))
plt.scatter(x_scatter, y_scatter, alpha=0.7) # 使用alpha设置透明度
plt.title('基本散点图')
plt.xlabel('X变量')
plt.ylabel('Y变量')
plt.show()
任务:
sns.set_style("darkgrid")或sns.set_theme(style="ticks"),看看效果有何不同。plt.annotate()添加文本,指向我们之前定义的特定highlight_x、highlight_y点。使标注信息丰富。plt.show()之前)使用plt.tight_layout()来自动调整间距。改进后的图表代码:
# 1. 应用不同样式(可选 - 尝试取消注释)
# sns.set_theme(style="ticks")
plt.figure(figsize=(7, 5))
plt.scatter(x_scatter, y_scatter, alpha=0.7, color='#20c997') # 青色点
# 2. 添加标题和标签
plt.title('带标注的散点图')
plt.xlabel('X变量')
plt.ylabel('Y变量')
# 3. 标注特定点
plt.annotate('有趣的点', # 要显示的文本
xy=(highlight_x, highlight_y), # 要标注的点(箭头尖端)
xytext=(highlight_x + 1, highlight_y + 3), # 文本位置
arrowprops=dict(facecolor='#495057', shrink=0.05, width=1, headwidth=8)) # 箭头样式
# 4. 调整布局
plt.tight_layout() # 通常用于防止重叠
# 5. 显示图表
plt.show()
# 可选:如果你改变了样式,请重置
sns.set_style("whitegrid") # 为下一个练习设置回默认样式
标注有助于引导观看者关注数据中的重要特征。plt.tight_layout()是进行基本布局调整的便捷函数。
条形图通常受益于清晰的标签和合适的颜色。
初始图表(使用Matplotlib):
plt.figure(figsize=(7, 4))
plt.bar(categories, values)
plt.title('类别值')
plt.ylabel('计数')
plt.show()
任务:
barplot,或者在Matplotlib中手动分配颜色。为了简化,我们这里尝试使用Seaborn的barplot。plt.xticks(rotation=45)旋转它们。改进后的图表代码(使用Seaborn):
plt.figure(figsize=(8, 5))
# 1. 使用调色板创建条形图
# Seaborn的barplot使用类别作为x轴,值作为y轴
sns.barplot(x=categories, y=values, palette='viridis')
# 2. 添加标题和标签(Seaborn会自动设置一些,但我们可以自定义)
plt.title('各类别值')
plt.xlabel('类别组')
plt.ylabel('测量值')
# 3. 添加值标签(需要遍历Seaborn创建的条形)
# 获取当前的Axes对象
ax = plt.gca()
# 遍历Axes中的补丁(条形)
for bar in ax.patches:
ax.text(bar.get_x() + bar.get_width() / 2., # X位置(条形中心)
bar.get_height(), # Y位置(条形顶部)
f'{bar.get_height():.0f}', # 文本(值,已格式化)
ha='center', # 水平对齐
va='bottom') # 垂直对齐
# 4. 旋转x轴标签(可选,取消注释以查看效果)
# plt.xticks(rotation=45, ha='right')
# 5. 调整布局
plt.tight_layout()
# 6. 显示图表
plt.show()
添加值标签和使用不同颜色可以明显提高条形图的可读性和专业外观。
最后,让我们保存一个你改进过的图表。保存可以让你在报告、演示文稿或网页中使用你的可视化内容。
任务:
将改进后的正弦和余弦折线图(来自练习1)保存为三种不同的格式:PNG、PDF和SVG。注意文件名扩展名。
保存代码:
# 首先重新生成正弦/余弦图(复制练习1中的改进代码)
plt.figure(figsize=(8, 5))
plt.plot(x_line, y1_line, color='#1f77b4', linestyle='-', label='sin(x)')
plt.plot(x_line, y2_line, color='#ff7f0e', linestyle='--', label='cos(x)')
plt.title('正弦和余弦函数')
plt.xlabel('X值')
plt.ylabel('Y值')
plt.ylim(-1.5, 1.5)
plt.legend(loc='lower left')
# 将图表保存为不同格式
# Matplotlib从扩展名推断格式
plt.savefig('sine_cosine_plot.png', dpi=300) # PNG:栅格格式,适用于网页,dpi控制分辨率
plt.savefig('sine_cosine_plot.pdf') # PDF:矢量格式,适用于文档,完美缩放
plt.savefig('sine_cosine_plot.svg') # SVG:矢量格式,适用于网页(可缩放),可编辑
# 如果你不需要显示图表,在保存后关闭图表是一个好习惯
plt.close()
print("图表已保存为sine_cosine_plot.png、sine_cosine_plot.pdf和sine_cosine_plot.svg")
运行此代码后,检查你的工作目录以查找保存的文件。注意区别:
dpi(每英寸点数)参数 (parameter)控制分辨率。这些练习涵盖了优化和保存图表的核心技术。请随时尝试不同的样式、颜色、标注和布局调整。有效的可视化通常需要迭代和改进,以更好地传达你的数据故事。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•