Matplotlib 中文博客:文本注解与常见图形参数详解
本文将详细讲解如何在 Matplotlib 中使用文本注解(包括 plt.text 和 plt.annotate 两种方法),以及散点图、折线图、饼图和柱状图的常见参数设置。为了支持中文显示,我们将使用 TkAgg 后端,并确保所有代码在中文环境中正确运行。
一、Matplotlib 文本注解详解
Matplotlib 提供了两种主要的文本注解方法:plt.text 和 plt.annotate。这两种方法都可以为图形添加文字说明,但用途和灵活性有所不同。以下将详细讲解它们的用法和参数设置。
1. 使用 plt.text 添加简单文本
plt.text 是最简单的文本注解方法,用于在图形的指定位置添加文字。它适合快速添加静态文本说明。
基本用法#### 参数说明
x,y: 文本的坐标位置(以数据坐标系为准)。s: 要显示的文本内容(字符串,支持中文)。fontsize: 字体大小(默认 10)。color: 文本颜色(例如 'red', 'blue' 或 RGB 值)。ha,va: 水平对齐(horizontal alignment: 'left', 'center', 'right')和垂直对齐(vertical alignment: 'top', 'center', 'bottom')。rotation: 文本旋转角度(度)。bbox: 文本背景框样式(例如dict(facecolor='white', alpha=0.5))。
示例代码:使用 plt.text 添加中文文本
以下代码展示如何在散点图中添加中文文本注解。
import matplotlib
matplotlib.use('TkAgg') # 使用 TkAgg 后端支持中文
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 解决负号显示问题
# 生成示例数据
x = np.random.rand(10)
y = np.random.rand(10)
# 创建散点图
plt.scatter(x, y, color='blue', label='数据点')
# 添加文本注解
plt.text(0.2, 0.8, '样本点1', fontsize=12, color='red', ha='center', va='center')
plt.text(0.7, 0.3, '样本点2', fontsize=12, color='green', ha='left', va='bottom',
bbox=dict(facecolor='white', alpha=0.5))
plt.title('散点图与文本注解示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
# 保存图形
plt.savefig('scatter_text_annotation.png')
说明
plt.text(0.2, 0.8, '样本点1', ...)在坐标 (0.2, 0.8) 处添加文本“样本点1”,字体大小为 12,红色,居中对齐。plt.text(0.7, 0.3, '样本点2', ...)在坐标 (0.7, 0.3) 处添加文本“样本点2”,绿色,左下对齐,并添加半透明白色背景框。bbox参数为文本添加背景框,alpha控制透明度(0 到 1)。- 保存为 PNG 文件以便查看。
2. 使用 plt.annotate 添加带箭头的复杂注解
plt.annotate 更适合需要指向特定数据点的复杂注解,例如带箭头的标注。它比 plt.text 更灵活,适合强调某个点或区域。
基本参数说明
s: 要显示的文本内容(字符串,支持中文)。xy: 箭头指向的坐标(数据坐标系)。xytext: 文本的坐标(数据坐标系)。arrowprops: 箭头样式(字典,例如dict(arrowstyle='->', color='black'))。fontsize,color,ha,va,bbox: 与plt.text相同。xycoords,textcoords: 坐标系类型(默认 'data',表示数据坐标系)。
示例代码:使用 plt.annotate 添加带箭头的中文注解
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成示例数据
x = np.random.rand(10)
y = np.random.rand(10)
# 创建散点图
plt.scatter(x, y, color='blue', label='数据点')
# 添加带箭头的注解
plt.annotate('重要数据点', xy=(x[0], y[0]), xytext=(x[0]+0.2, y[0]+0.2),
arrowprops=dict(arrowstyle='->', color='black'),
fontsize=12, color='purple', ha='center', va='center',
bbox=dict(facecolor='white', alpha=0.5))
plt.title('散点图与带箭头注解示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
# 保存图形
plt.savefig('scatter_annotate_annotation.png')
说明
plt.annotate('重要数据点', xy=(x[0], y[0]), ...)在第一个数据点 (x[0], y[0]) 处添加箭头,指向“重要数据点”文本,文本位置为 (x[0]+0.2, y[0]+0.2)。arrowprops定义箭头样式,arrowstyle='->'表示带箭头的线条。- 文本为紫色,居中对齐,带半透明白色背景框。
- 保存为 PNG 文件以便查看。
二、常见图形参数详解(基于 TkAgg 后端和中文支持)
以下介绍散点图、折线图、饼图和柱状图的常见参数,重点说明如何在中文环境中使用 TkAgg 后端绘制这些图形。
1. 散点图(plt.scatter)
散点图用于显示离散数据点的分布。
常见参数
x,y: 数据点的 x 和 y 坐标(数组)。s: 点的大小(标量或数组,默认 20)。c: 点的颜色(颜色名称、RGB 值或数组)。marker: 点的形状(例如 'o', '^', 's',默认 'o')。alpha: 透明度(0 到 1)。label: 图例标签。
示例代码
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成示例数据
x = np.random.rand(10)
y = np.random.rand(10)
sizes = np.random.rand(10) * 1000
# 创建散点图
plt.scatter(x, y, s=sizes, c='blue', alpha=0.5, marker='o', label='随机数据')
plt.title('中文散点图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
# 保存图形
plt.savefig('scatter_plot.png')
说明
s=sizes使点大小随机变化。alpha=0.5设置半透明效果。label用于图例显示。
2. 折线图(plt.plot)
折线图用于显示数据的连续变化趋势。
常见参数
x,y: 数据点的 x 和 y 坐标(数组)。color: 线条颜色。linestyle: 线条样式(例如 '-', '--', ':', '-.')。linewidth: 线条宽度(默认 1)。marker: 数据点标记(例如 'o', '^')。label: 图例标签。
示例代码
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 生成示例数据
x = np.linspace(0, 10, 100)
y = np.sin(x)
# 创建折线图
plt.plot(x, y, color='red', linestyle='--', linewidth=2, marker='o', label='正弦曲线')
plt.title('中文折线图示例')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.legend()
plt.grid(True)
# 保存图形
plt.savefig('line_plot.png')
说明
linestyle='--'设置虚线。marker='o'在数据点处添加圆形标记。linewidth=2增加线条粗细。
3. 饼图(plt.pie)
饼图用于显示数据的占比分布。
常见参数
x: 各部分的数据(数组)。labels: 各部分的标签(字符串列表)。colors: 各部分的颜色(颜色列表)。autopct: 显示百分比的格式(例如 '%.1f%%')。startangle: 起始角度(默认 0)。explode: 突出显示某部分(数组,例如 [0, 0.1, 0])。
示例代码
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 示例数据
sizes = [30, 40, 20, 10]
labels = ['类别A', '类别B', '类别C', '类别D']
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99']
explode = [0, 0.1, 0, 0]
# 创建饼图
plt.pie(sizes, labels=labels, colors=colors, autopct='%.1f%%', startangle=90, explode=explode)
plt.title('中文饼图示例')
plt.axis('equal') # 确保饼图为圆形
# 保存图形
plt.savefig('pie_chart.png')
说明
autopct='%.1f%%'显示百分比,保留一位小数。explode=[0, 0.1, 0, 0]突出显示“类别B”。plt.axis('equal')确保饼图比例正确。
4. 柱状图(plt.bar)
柱状图用于比较不同类别的数据。
常见参数
x: 柱子的 x 坐标(数组或类别标签)。height: 柱子的高度(数组)。width: 柱子宽度(默认 0.8)。color: 柱子颜色。align: 对齐方式('center' 或 'edge')。label: 图例标签。
示例代码
import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 示例数据
categories = ['类别A', '类别B', '类别C', '类别D']
values = [4, 3, 2, 5]
# 创建柱状图
plt.bar(categories, values, width=0.4, color='skyblue', label='数据')
plt.title('中文柱状图示例')
plt.xlabel('类别')
plt.ylabel('值')
plt.legend()
plt.grid(True, axis='y')
# 保存图形
plt.savefig('bar_chart.png')
说明
width=0.4设置柱子宽度为默认值的一半。color='skyblue'使用浅蓝色填充。grid(True, axis='y')添加水平网格线。
三、总结
本文详细讲解了 Matplotlib 的文本注解功能(plt.text 和 plt.annotate),包括参数设置和中文支持的示例代码。此外,我们介绍了散点图、折线图、饼图和柱状图的常见参数,并提供了使用 TkAgg 后端和中文字体(SimHei)的完整代码示例。所有图形均保存为 PNG 文件,方便查看。
通过这些示例,你可以轻松在 Matplotlib 中创建支持中文的图形,并为数据添加清晰的文本注解。希望这篇博客对你学习 Matplotlib 有所帮助!