Matplotlib 图例中的文本对齐方式
在使用 Matplotlib 画图时,图例就是我们经常需要添加的元素之一。一个好的图例可以让我们更好地理解图中的内容。而在图例中,我们经常需要展示一些文本信息,比如数据的来源、单位、单位符号等等。这些文本信息的位置、对齐方式等也是需要我们关注的问题。
本文将介绍在 Matplotlib 图例中如何设置文本的对齐方式。我们将以散点图为例,代码如下所示:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 50)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')
ax.legend()
plt.show()
我们可以看到,上图中的图例已经自动添加,但是默认的文本对齐方式是左对齐。如果我们想要调整文本的位置,该怎么做呢?
legend
方法中的 loc
参数
plt.legend()
中的 loc
参数可以用来设置图例的位置。参数值可以是字符串,也可以是由两个数值组成的元组。具体参数值和位置对应关系如下:
- ‘best’:自动分配。
- ‘upper right’:右上角。
- ‘upper left’:左上角。
- ‘lower left’:左下角。
- ‘lower right’:右下角。
- ‘right’:正右侧。
- ‘center left’:左侧居中。
- ‘center right’:右侧居中。
- ‘lower center’:底部居中。
- ‘upper center’:顶部居中。
- (0.1, 0.1):位置由元组中两个数值确定,数值的范围是 [0, 1]。
下面代码演示了如何使用 loc
参数设置图例的位置:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 50)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')
ax.legend(loc=(1.0, 0.5))
plt.show()
运行上述代码,会看到图例出现在了右边中间的位置。
在上面的代码中,我们使用了 (1.0, 0.5)
作为 loc
参数的值,表示图例在右边中间的位置。
文本对齐方式
在默认的情况下,文本的对齐方式是左对齐。在 plt.legend()
方法的 loc
参数无法满足我们需求之时,我们可以通过 legend
对象的属性来更改文本的对齐方式。legend
对象是 ax.legend()
的返回值,它包含了图例的所有属性和设置项。文本的对齐方式可以通过 legend
对象的 get_texts()
方法获取到,然后再使用 set_ha()
和 set_va()
方法来设置对齐方式。
get_texts()
方法返回一个包含所有文本的列表,我们可以遍历这个列表,来对每个文本设置对齐方式。而 set_ha()
方法和 set_va()
方法分别用于设置水平方向(即 x 轴方向)和垂直方向(即 y 轴方向)上的对齐方式。它们的可选值包括(需要注意的是,x 轴方向的对齐方式只有 'center'
和 'right'
两种):
- ‘center’:居中对齐。
- ‘right’:右对齐。
- ‘left’:左对齐。
- ‘top’:顶部对齐。
- ‘bottom’:底部对齐。
- ‘baseline’:基线对齐。
下面代码演示了如何对图例中的文本进行对齐方式设置:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 50)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y1, label='sin(x)')
ax.plot(x, y2, label='cos(x)')
legend = ax.legend(loc=(1.0, 0.5))
texts = legend.get_texts()
for i in range(len(texts)):
if i == 0:
texts[i].set_ha('right')
else:
texts[i].set_ha('center')
texts[i].set_va('top')
plt.show()
运行上述代码,我们会发现图例中的文本对齐方式已经被设置好了:
在上面的代码中,我们首先通过 legend.get_texts()
方法获取到所有的文本,然后分别使用 set_ha()
和 set_va()
方法对文本进行对齐方式设置。其中,第一个文本使用了 'right'
对齐方式,其余的文本使用了 'center'
对齐方式和 'top'
对齐方式。
结论
在 Matplotlib 画图时,图例是常用的元素之一。通过设置 legend
方法的 loc
参数,我们可以控制图例的位置;而通过 legend
对象的属性,我们可以进一步对图例的文本进行对齐方式设置。这些设置可以让我们展示更好的图例,帮助更好地理解图中的内容。