gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:00:52 24 4
gpt4 key购买 nike

我想做的是控制 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 对象的字体大小更改为中等。但是,出于某种原因,这会将所有文本对象的字体大小更改为中等,而不仅仅是我实际更改的单个字体。我觉得这很奇怪,因为我可以通过这种方式单独设置其他属性,例如文本颜色。

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

最佳答案

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

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

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

解决这个问题的“技巧”是简单地为每个图例条目创建一个不同的 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

关于python - 如何更改 pyplot 中单个图例条目的字体大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31660221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com