說明:此貼會不按期進行更新!html
若是已經存在figure對象,能夠經過如下代碼設置尺寸大小:api
f.set_figheight(15) f.set_figwidth(15)
若果經過.sublots()
命令來建立新的figure
對象, 能夠經過設置figsize參數達到目的。dom
f, axs = plt.subplots(2,2,figsize=(15,15))
描述以下:在X軸標出一些重要的刻度點,固然實現方式有兩種:直接在X軸上標註和經過註釋annotate的形式標註在合適的位置。
其中第一種的實現並非很合適,此處爲了學習的目的一併說明下。學習
先說第一種:spa
正常X軸標註不會是這樣的,爲了說明此問題特地標註成這樣,如此看來 0.3 和 0.4的標註重疊了,固然瞭解決重疊的問題能夠經過改變figure
的size
實現,顯然此處並不想這樣作。code
怎麼解決呢,那就在 0.3 和 0.4之間再設置一個刻度,有了空間後不顯示便可。htm
代碼以下:對象
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt fig = plt.figure(figsize=(3, 3)) ax = fig.add_subplot(1, 1, 1, frameon=False) ax.set_xlim(-0.015, 1.515) ax.set_ylim(-0.01, 1.01) ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5]) #增長0.35處的刻度並不標註文本,而後從新標註0.3和0.4處文本 ax.set_xticklabels([0.0, "", "", 1.0, 1.5]) ax.set_xticks([0.35], minor=True) ax.set_xticklabels(["0.3 0.4"], minor=True) #上述設置只是增長空間,並不想看到刻度的標註,所以次刻度線不予顯示。 for line in ax.xaxis.get_minorticklines(): line.set_visible(False) ax.grid(True) plt.show()
最終圖像形式以下:blog
固然最合理的方式是採用註釋的形式,好比:utf-8
代碼以下:
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np # Plot a sinc function delta=2.0 x=np.linspace(-10,10,100) y=np.sinc(x-delta) # Mark delta plt.axvline(delta,ls="--",color="r") plt.annotate(r"$\delta$",xy=(delta+0.2,-0.2),color="r",size=15) plt.plot(x,y)
顯示效果對比:
設置前:
設置後:
兩張的圖像的差異很明顯,代碼以下:
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) plot_data=[1.7,1.7,1.7,1.54,1.52] xdata = range(len(plot_data)) labels = ["2009-June","2009-Dec","2010-June","2010-Dec","2011-June"] ax.plot(xdata,plot_data,"b-") ax.set_xticks(range(len(labels))) ax.set_xticklabels(labels) ax.set_yticks([1.4,1.6,1.8]) # grow the y axis down by 0.05 ax.set_ylim(1.35, 1.8) # expand the x axis by 0.5 at two ends ax.set_xlim(-0.5, len(labels)-0.5) plt.show()
上圖說明需求:
經過設置 set_horizontalalignment()來控制標註的左右位置:
for tick in ax2.xaxis.get_majorticklabels(): tick.set_horizontalalignment("left")
固然標註文本的上下位置也是能夠控制的,好比:
ax2.xaxis.get_majorticklabels()[2].set_y(-.1)
固然控制刻度標註的上下位置也能夠用labelpad
參數進行設置:
pl.xlabel("...", labelpad=20)
或:
ax.xaxis.labelpad = 20
具體設置請查閱官方文檔,完整的代碼以下:
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import datetime # my fake data dates = np.array([datetime.datetime(2000,1,1) + datetime.timedelta(days=i) for i in range(365*5)]) data = np.sin(np.arange(365*5)/365.0*2*np.pi - 0.25*np.pi) + np.random.rand(365*5) /3 # creates fig with 2 subplots fig = plt.figure(figsize=(10.0, 6.0)) ax = plt.subplot2grid((2,1), (0, 0)) ax2 = plt.subplot2grid((2,1), (1, 0)) ## plot dates ax2.plot_date( dates, data ) # rotates labels plt.setp( ax2.xaxis.get_majorticklabels(), rotation=-45 ) # shift labels to the right for tick in ax2.xaxis.get_majorticklabels(): tick.set_horizontalalignment("right") plt.tight_layout() plt.show()
圖像外部邊緣的調整可使用plt.tight_layout()
進行自動控制,此方法不可以很好的控制圖像間的間隔。
若是想同時控制圖像外側邊緣以及圖像間的空白區域,使用命令:
plt.subplots_adjust(left=0.2, bottom=0.2, right=0.8, top=0.8,hspace=0.2, wspace=0.3)
效果以下(subplot row i):
思路其實建立整個的子圖像,而後將圖像的刻度、標註等部分做不顯示設置,僅僅顯示圖像的 title。
代碼以下:
import matplotlib.pyplot as plt fig, big_axes = plt.subplots(figsize=(15.0, 15.0) , nrows=3, ncols=1, sharey=True) for row, big_ax in enumerate(big_axes, start=1): big_ax.set_title("Subplot row %s \n" % row, fontsize=16) # Turn off axis lines and ticks of the big subplot # obs alpha is 0 in RGBA string! big_ax.tick_params(labelcolor=(0,0,0,0), top='off', bottom='off', left='off', right='off') # removes the white frame big_ax._frameon = False for i in range(1,10): ax = fig.add_subplot(3,3,i) ax.set_title('Plot title ' + str(i)) fig.set_facecolor('w') plt.tight_layout() plt.show()
效果以下:
代碼以下:
import numpy as np import matplotlib.pyplot as plt t = np.arange(-1, 2, .01) s = np.sin(2*np.pi*t) plt.plot(t, s) # draw a thick red hline at y=0 that spans the xrange l = plt.axhline(linewidth=4, color='r') # draw a default hline at y=1 that spans the xrange l = plt.axhline(y=1) # draw a default vline at x=1 that spans the yrange l = plt.axvline(x=1) # draw a thick blue vline at x=0 that spans the upper quadrant of # the yrange l = plt.axvline(x=0, ymin=0.75, linewidth=4, color='b') # draw a default hline at y=.5 that spans the middle half of # the axes l = plt.axhline(y=.5, xmin=0.25, xmax=0.75) p = plt.axhspan(0.25, 0.75, facecolor='0.5', alpha=0.5) p = plt.axvspan(1.25, 1.55, facecolor='g', alpha=0.5) plt.axis([-1, 2, -1, 2]) plt.show()