如何更改pyplot中各个图例条目的字体大小?

时间:2015-07-27 18:07:42

标签: python matplotlib legend

我要做的是控制pyplot中图例中各个条目的字体大小。也就是说,我希望第一个条目是一个大小,第二个条目是另一个条目。这是我尝试解决方案,但无效。

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(1,5,0.5)
plt.figure(1)
plt.plot(x,x,label='Curve 1')
plt.plot(x,2*x,label='Curve 2')
leg = plt.legend(loc = 0, fontsize = 'small')
leg.get_texts()[0].set_fontsize('medium')
plt.show()

我的期望是所有图例条目的默认大小都是“小”。然后,我获得Text对象的列表,并将仅一个Text对象的fontsize更改为medium。但是,由于某些原因,这会将所有Text对象字体大小更改为中等,而不是仅仅是我实际更改的单个字体。我发现这很奇怪,因为我可以用这种方式单独设置其他属性,如文本颜色。

最终,我只需要一些方法来更改单个条目的字体大小的传奇。

2 个答案:

答案 0 :(得分:6)

每个图例条目的字体似乎由matplotlib.font_manager.FontProperties的实例管理。问题是:每个条目都没有自己的FontProperties ......它们都共享相同的条目。这通过写作验证:

>>> t1, t2 = leg.get_texts()
>>> t1.get_fontproperties() is t2.get_fontproperties()
True

因此,如果您更改第一个条目的大小,则第二个条目的大小会随之自动更改。

" hack"解决这个问题只是为每个图例条目创建一个FontProperties的独特实例:

x = np.arange(1,5,0.5)
plt.figure(1)
plt.plot(x,x,label='Curve 1')
plt.plot(x,2*x,label='Curve 2')
leg = plt.legend(loc = 0, fontsize = 'small')

t1, t2 = leg.get_texts()
# here we create the distinct instance
t1._fontproperties = t2._fontproperties.copy()
t1.set_size('medium')

plt.show()

现在尺寸正确:

enter image description here

答案 1 :(得分:0)

如果为绘图中的文本渲染激活LaTeX,则可能是一种更简单的方法。您可以轻松实现这一点,在“导入”之后添加一个额外的命令行:

plt.rc('text', usetex=True)

现在,您可以更改任何特定字符串的大小,方法是在要用LaTeX处理的字符串的开头指定一个r,然后在其中添加所需的size command for LaTeX({{1 }}等。 例如:

\small, \Large, \Huge,

查看您改编的代码。只需很小的改动!

r'\Large Curve 1'

所以您得到了:

enter image description here