如何将文本放置到Python图形之外?
当我们用Python进行数据可视化时,通常会使用matplotlib进行图形绘制。在这些图形中,我们经常需要在图形之外添加一些额外的信息,例如:图形的标题、x轴和y轴的标签、图例等。在本篇文章中,我们会教你如何让这些文本信息正确的显示在图形之外。
阅读更多:Python 教程
使用plt.annotate()方法
plt.annotate()方法是一个非常好用的工具,它可以在调用该方法的坐标位置上添加文字信息。在这里,我们可以先画出一张简单的图形:
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [4, 2, 1, 3, 5]
plt.plot(x, y)
plt.show()
运行上述代码之后,我们可以得到一条简单的线性图。
如果我们现在想要在图形的(3,1)的位置上添加一段文本“我是注释”,可以按照以下方式将这个文本添加到图形之外:
plt.plot(x, y)
plt.annotate('我是注释', xy=(3, 1), xytext=(4, 4),
arrowprops=dict(arrowstyle='->'))
plt.show()
在上面的代码中,我们通过xy参数来确定要添加文本的位置,通过xytext参数来确定文本所要显示的位置。在这里,箭头被设置成了箭头形状,主要是为了更好地说明文本框的位置。如果我们不想要箭头,可以将arrowprops参数省略:
plt.plot(x, y)
plt.annotate('我是注释', xy=(3, 1), xytext=(4, 4))
plt.show()
这样我们就得到了一个不带箭头的简单注释。
我们还可以通过“fontsize”参数来设置文本的字体大小,通过“color”参数来设置文本的颜色:
plt.plot(x, y)
plt.annotate('我是注释', xy=(3, 1), xytext=(4, 4), fontsize=16, color='red')
plt.show()
当我们运行上述代码时,我们将得到一个设置了字体大小和字体颜色的注释。
使用plt.text()
plt.text()方法可以在图形之外的任意位置添加文本。我们可以按照以下方式使用plt.text()方法来向我们的图形添加一个文本框:
plt.plot(x, y)
plt.text(0.5, 0.5, '这是一段文本', ha='center', va='center', fontsize=16,
color='red', alpha=0.5, bbox=dict(facecolor='white', edgecolor='black',
boxstyle='round'))
plt.show()
在上面的代码中,我们首先确定了文本框的位置,该位置由(0.5, 0.5)来确定。然后,通过ha和va参数来确定文本的对齐方式,这里我们将文本设置为居中对齐。我们还可以通过fontsize和color参数来设置文本的字体大小和颜色,通过alpha参数来设置文本框的透明度。最后,我们使用bbox参数来确定文本框的外边框的颜色和边框样式。
使用ax.text在上面的所有示例中,我们都是直接在当前图形中添加文本信息。但是有时候,我们可能需要在一个大的图形中进行分组可视化,每个小的图形中可能需要自己的文本信息。在这种情况下,我们需要使用子图,并使用ax.text()在对应的子图中添加文本。
我们可以按照以下方式创建一个有多个子图的大图:
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))
在上述代码中,我们创建了一个2×2的子图矩阵,并通过figsize参数来确定整张图形的大小。接下来,我们就可以通过使用axes[row, col].text()方法,并传入对应的行和列来向对应的子图中添加文本。例如:
axes[0, 1].text(0.5, 0.5, '我是子图1', ha='center', va='center', fontsize=16,
color='red', bbox=dict(facecolor='white', edgecolor='black',
boxstyle='round'))
这个代码会向我们的第一个子图中添加一个带有红色边框的文本框。
我们也可以利用for循环来向多个子图中添加文本:
for row in range(2):
for col in range(2):
axes[row, col].text(0.5, 0.5, f'这是第{row*2+col+1}个子图', ha='center',
va='center', fontsize=16, color='red',
bbox=dict(facecolor='white', edgecolor='black',
boxstyle='round'))
这个代码会向我们的所有子图中添加一个带有红色边框的文本框。
结论
总之,在Python中使用matplotlib进行数据可视化时,向图形之外添加文本信息是一个很常见的需求。我们可以使用plt.annotate()和plt.text()在图形之外添加注释或文本框。当我们需要向多个子图中添加文本信息时,需要使用ax.text()方法来针对每个子图添加文本信息。
极客笔记