2015-11-18 139 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