matplotlib y軸標注顯示不全以及subplot調整的問題
問題:
我想在y軸顯示的標注太長,想把它變成兩行顯示,發現生成的圖形只顯示的第二行的字,把第一行的字擠出去了
想要的是顯示兩行這樣子的
現實卻是這樣子
主要相關的api有:
- plt.subplots_adjust
- set_ylabel
- plt.text
解決思路
- 當出現右邊顯示不全的時候,第一感覺是:應該可以通過set_ylabel 來設置y軸標注的位置和大小,發現set_ylabel只能設置labelpad ,沒有位置的參數;
- 然后找到了可以用text設置標注字體的位置和方向,但是要多次定位,嘗試,發現不方便;
- 那么想到的是應該可以設置plot的位置吧,用ax1.plot?找了下,也沒看到,不爽;
- 在show的圖形界面發現一個移動的按鈕
- 移動left亦可以顯示出y軸的標注了,那么我應該只需要在程序中設置一下left的參數既可以了吧,在上面matplotlib的example中,找到了我想要的subplots_adjust
- 即有了下面的源代碼,滿足設置要求。
源代碼如下:
import matplotlib.pyplot as plt
import numpy as np
from numpy import abs
size=[5,10,20,30,50,100]
avg=[-0.2896,0.073865632,0.034858287,-0.092241705,-0.022924236,0.016541661]
avr=[0.032,0.077757872,0.090351641,0.036522663,0.034413038,0.096587464]
fig = plt.figure()
ax1 = fig.add_subplot(211)
lns1 = ax1.plot(size, trackPos_avg,color='blue',label='error average',linestyle='-',linewidth=1.9)
ax1.set_ylabel('deviation from\ncentral line ($m$)',fontsize=18, labelpad = 0.5)
plt.xticks(fontsize = 17)#對坐標的值數值,大小限制
plt.yticks(fontsize = 17)
ax2 = fig.add_subplot(212)
ax2.set_ylabel('standard \nvariance ($m^2$)',fontsize=18,labelpad = 12.5)
lns2 = ax2.plot(size, avr, color='red',label='mean square error',linestyle='-',linewidth=1.9)
plt.xticks(fontsize = 17)#對坐標的值數值,大小限制
plt.yticks(fontsize = 17)
ax2.set_xlabel('replay size',fontsize=18)
plt.subplots_adjust(left=0.18, wspace=0.25, hspace=0.25,
bottom=0.13, top=0.91)
\#plt.text(0.4, 0.4, 'deviation from\n central line ($m$)', rotation=90, ha='left')
\#plt.legend(prop={'size':18}) # loc='upper left',
\#fig.savefig('./figure/error_paper.eps', format='eps', dpi=1000)
fig.savefig('./figure/error_paper.png', dpi=1000)
plt.show()
可以下面的yticks,限制橫縱坐標的值
plt.xticks(fontsize = 17)#對坐標的值數值,大小限制
plt.yticks([0.01,0.03,0.05,0.07,0.09],fontsize = 17)