2015-11-18 110 views
3

如图所示,希腊字母的字体大小似乎比正常字符要小。我想让他们看起来一样的大小,如何实现这一目标?如何更改个别图例标签尺寸的大小?

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

回答

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

+0

这是一个很好的答案!不仅给出解决方案,还教你如何思考。 – buzhidao

+0

很高兴我能帮忙! – jme