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

标签 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()

最佳答案

这有一点技巧。如果您只对解决方案感兴趣,请向下滚动到末尾。

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

关于python - 如何更改单个图例标签大小的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33783446/

相关文章:

python - 如何辨别我的 Python 模块是否被 Ansible 调用?

python - 使用 SciPy 数值求解 ODE

python - 标签在图表上不可见

python - 与 pandas 数据框中的日期绘制保持一致

python - 试图将 fizzbuzz 变成 python 3 中的函数

python - 如何合并两个 df,使 df1 的所有值都应该在新的 df 中

python - 在 linux 中安装 matplotlib 的问题

r - 具有显着差异和相互作用的条形图?

r - 创建密度图时出错

python 循环导入并检查变量