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

zep*_*hyr 5 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()
Run Code Online (Sandbox Code Playgroud)

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

最终,我只需要一些方法来更改单个条目的字体大小以用于图例.

jme*_*jme 6

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

>>> t1, t2 = leg.get_texts()
>>> t1.get_fontproperties() is t2.get_fontproperties()
True
Run Code Online (Sandbox Code Playgroud)

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

解决这个问题的"黑客"只是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()
Run Code Online (Sandbox Code Playgroud)

现在尺寸正确:

在此输入图像描述