如何更改单个图例标签大小的大小?

时间:2015-11-18 15:03:21

标签: python matplotlib plot

如图所示,希腊字母的相同字体大小似乎小于普通字符。我想让它们看起来大小相同,如何实现呢?

enter image description here

图表的代码如下:

import numpy as np
import math 
import matplotlib.pyplot as plt

alpha=np.arange(0,1,0.01)
gamma=np.sin(2*np.pi*alpha)
x=alpha
y=np.cos(2*np.pi*x)
plt.plot(x,y,label=r'cosine function')
plt.plot(alpha,gamma,label=r'$\gamma=\sin(\alpha)$')
plt.legend(loc=0,fontsize=20)
plt.show()

1 个答案:

答案 0 :(得分:3)

这有点诀窍。如果您只是对解决方案感兴趣,请向下滚动到最后。

plt.legend返回一个Legend对象,其中包含允许您修改图例外观的方法。首先,我们将保存Legend对象:

legend = plt.legend(loc=0, fontsize=20)

我们正在寻找的方法是Legend.get_texts()。这将返回Text个对象的列表,其方法控制图例文本的大小,颜色,字体等。我们只想要第二个Text对象:

text = legend.get_texts()[1]

Text对象有一个名为Text.set_fontsize的方法。所以,试试吧。总而言之,代码的结尾应如下所示:

legend = plt.legend(loc=0,fontsize=20)
text = legend.get_texts()[1]
text.set_fontsize(40)

这就是我们得到的:

enter image description here

嗯。看起来图例条目的都变大了。这当然不是我们想要的。这里发生了什么,我们如何解决它?

缺点是每个图例条目的大小,颜色等都由FontProperties类的实例管理。问题是这两个条目共享同一个实例。因此,设置一个实例的大小也会改变另一个实例的大小。

解决方法是创建一个新的,独立的字体属性实例,如下所示。首先,我们像以前一样得到我们的文本:

text = legend.get_texts()[1]

现在,我们不是立即设置大小,而是获取字体属性对象,但请确保复制

props = text.get_font_properties().copy()

现在我们将这个新的,独立的字体属性实例设为我们文本的属性:

text.set_fontproperties(props)

我们现在可以尝试设置此图例条目的大小:

text.set_size(40)

解决方案

您的代码现在应该如下所示:

legend = plt.legend(loc=0,fontsize=20)
text = legend.get_texts()[1]
props = text.get_font_properties().copy()
text.set_fontproperties(props)
text.set_size(40)

制作一张类似

的情节

enter image description here