大小我想Matplotlib/Pyplot生成具有一致的畫布大小地塊。也就是說,這些數字可以具有不同的大小以容納軸描述,但繪圖區(繪製曲線的矩形)應始終具有相同的大小。設置繪圖畫布在Matplotlib
有沒有一種簡單的方法來實現這一目標? pyplot.figure()的選項figsize似乎設置了圖形的整體大小,而不是畫布的大小,因此,只要軸描述佔用更多或更少的空間,我就會得到不同的畫布大小。
大小我想Matplotlib/Pyplot生成具有一致的畫布大小地塊。也就是說,這些數字可以具有不同的大小以容納軸描述,但繪圖區(繪製曲線的矩形)應始終具有相同的大小。設置繪圖畫布在Matplotlib
有沒有一種簡單的方法來實現這一目標? pyplot.figure()的選項figsize似乎設置了圖形的整體大小,而不是畫布的大小,因此,只要軸描述佔用更多或更少的空間,我就會得到不同的畫布大小。
這是我與Matplotlib最大挫折之一。我經常使用柵格數據,例如我想添加一個顏色表,圖例和一些標題。 matplotlib庫中的任何簡單示例都會導致不同的分辨率,因此會重新採樣數據。特別是在進行圖像分析時,您不需要任何(不需要的)重採樣。
這裏是我最常做的,雖然我很想知道,如果有更簡單的或更好的方法。
讓我們開始與加載圖像,只是輸出,因爲它是具有相同的分辨率:我手動定義的軸位置,以使跨越整個數字
import matplotlib.pyplot as plt
import urllib2
# load the image
img = plt.imread(urllib2.urlopen('http://upload.wikimedia.org/wikipedia/en/thumb/5/56/Matplotlib_logo.svg/500px-Matplotlib_logo.svg.png'))
# get the dimensions
ypixels, xpixels, bands = img.shape
# get the size in inches
dpi = 72.
xinch = xpixels/dpi
yinch = ypixels/dpi
# plot and save in the same size as the original
fig = plt.figure(figsize=(xinch,yinch))
ax = plt.axes([0., 0., 1., 1.], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
plt.savefig('D:\\mpl_logo.png', dpi=dpi, transparent=True)
注。
以類似的方式如上,你可以爲圖像添加一定的餘量,以允許標籤或colorbars等
此示例將圖像,然後將其用於繪製標題高於20%的保證金:
fig = plt.figure(figsize=(xinch,yinch/.8))
ax = plt.axes([0., 0., 1., .8], frameon=False, xticks=[],yticks=[])
ax.imshow(img, interpolation='none')
ax.set_title('Matplotlib is fun!', size=16, weight='bold')
plt.savefig('D:\\mpl_logo_with_title.png', dpi=dpi)
所以圖中的y尺寸(高度)增加,並且軸的y尺寸被均等地減小。這會產生更大(整體)的輸出圖像,但軸區域的大小仍然相同。
這可能是不錯的有一個數字或軸財產一樣.set_scale()來強制一個真正的1對X輸出。
你可以使用一些矢量格式嗎?它_should_(我認爲)繪製每個像素爲矩形。或者僅僅是樣品。 – tacaswell
謝謝,你的建議奏效!順便說一句,我想我在調用figure()之後立即使用subplot_adjust(0,0,1,1)找到了一種更優雅的方式。然後,您不需要定義座標軸位置,因爲它們已經和圖形一樣大。 最後,如果您不想手動指定邊距,則可以使用參數bbox_inches ='tight'調用savefig()。在這種情況下,繪圖區域將與(xinch,yinch)所定義的完全相同,並且該圖的大小足以容納軸描述。 (正如tcaswell所指出的,不要使用tight_layout!) – Dario
這聽起來很簡單,謝謝你的提示。我會在稍後嘗試你的建議。 @tcaswell,謝謝,這可能在某些情況下工作,我認爲pcolor應該能夠很容易地做到這一點。但是任何其他後處理都會更困難。 –
這有可能是'gridspec'允許你控制你想要什麼(見最後3 [這裏的例子(http://matplotlib.org/examples/pylab_examples/demo_tight_layout.html))。你能否添加一些顯示不同軸描述的例子來引起問題? – Bonlenfum
這是MPL解耦繪製和繪製內容描述的代價。很確定,親自動手做這件事,並努力避免'tight_layout',這是最好的方式。 – tacaswell