2017-01-05 20 views
0

在下面的代碼片段,我想百分號追加到一個陰謀的所有Y軸刻度標籤:matplotlib與Qt5Agg後端返回空ticklabels

import matplotlib as mpl 
import pandas as pd 
from matplotlib import pyplot as plt 
print mpl.__version__, mpl.get_backend() 

df = pd.DataFrame({'a': [10, 40], 'b': [20, 30]}) 
ax = df.plot(kind='bar', title='Plot of Percentage') 
plt.draw() 
ax.set_yticklabels([x.get_text() + '%' for x in ax.get_yticklabels()]) 
ax.get_figure().savefig('test.png', bbox_inches='tight') 

在蟒蛇2.7.13 + matplotlib 1.5.3使用後端Qt5Agg,ax.get_yticklabels()返回空Text對象的列表,產生以下輸出圖像中:

enter image description here

上面代碼段可以正常工作下蟒2.6.9 +墊plotlib 1.4.2 + Qt4Agg後端和python 2.6.6 + matplotlib 1.3.1 + TkAgg後端。

可能涉及到:https://github.com/matplotlib/matplotlib/issues/6103/

+0

這不是最佳的解決方案,但它的工作原理。在關閉窗口後將plt.draw()更改爲plt.show(),將修改後的標籤保存爲圖像 – eyllanesc

+0

@eyllanesc:感謝您內聯圖像。我嘗試用plt.show()替換sivefig行,但它似乎不起作用。我錯過了其他任何環境嗎? –

+0

進口matplotlib如MPL 進口熊貓作爲PD 從matplotlib進口pyplot作爲PLT 打印(MPL .__ version__,mpl.get_backend()) DF = pd.DataFrame({ 'A':[10,40],' b':[20,30]}) ax = df.plot(kind ='bar',title ='Plot of Percentage') plt.show() ax.set_yticklabels([x.get_text()+' %'for x in ax.get_yticklabels()]) ax.get_figure()。savefig('test.png',bbox_inches ='tight') – eyllanesc

回答

0

的ticklabels實際上並沒有填補,直到畫布繪製完成。由於標籤由matplotlib.ticker.***Formatter確定,所以最好的解決方案當然不是試圖自己更改標籤標籤,而是使用方便的格式器。

這裏FuncFormatter似乎是一個不錯的選擇。

import pandas as pd 
import matplotlib.pyplot as plt 
import matplotlib.ticker 

df = pd.DataFrame({'a': [10, 40], 'b': [20, 30]}) 
ax = df.plot(kind='bar', title='Plot of Percentage') 

func = lambda x, pos: "{} %".format(x) 
ax.yaxis.set_major_formatter(matplotlib.ticker.FuncFormatter(func)) 
plt.show() 

enter image description here

沒有必要繪製任何東西,這種解決方案也依賴於後端。