2012-04-30 184 views
116

我需要添加兩個子圖到一個圖。一個小區需要大約三倍於第二個(相同的高度)。我使用GridSpeccolspan這個參數完成了這個操作,但是我想用figure這樣做,所以我可以保存爲PDF。我可以在構造函數中使用figsize參數調整第一個圖形,但是如何更改第二個圖形的大小?Matplotlib不同大小的子圖

+2

Gridspec的作品與一個正常的數字。 – tillsten

回答

165

您可以使用gridspecfigure

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib import gridspec 

# generate some data 
x = np.arange(0, 10, 0.2) 
y = np.sin(x) 

# plot it 
fig = plt.figure(figsize=(8, 6)) 
gs = gridspec.GridSpec(1, 2, width_ratios=[3, 1]) 
ax0 = plt.subplot(gs[0]) 
ax0.plot(x, y) 
ax1 = plt.subplot(gs[1]) 
ax1.plot(y, x) 

plt.tight_layout() 
plt.savefig('grid_figure.pdf') 

resulting plot

20

我以前pyplotaxes對象來手動調整大小,而不使用GridSpec

import matplotlib.pyplot as plt 
import numpy as np 
x = np.arange(0, 10, 0.2) 
y = np.sin(x) 

# definitions for the axes 
left, width = 0.07, 0.65 
bottom, height = 0.1, .8 
bottom_h = left_h = left+width+0.02 

rect_cones = [left, bottom, width, height] 
rect_box = [left_h, bottom, 0.17, height] 

fig = plt.figure() 

cones = plt.axes(rect_cones) 
box = plt.axes(rect_box) 

cones.plot(x, y) 

box.plot(y, x) 

plt.show() 
+2

對於我們這些人來說,仍然在matplotlib 0.99沒有gridspec! – timday

+1

對gridspec不適用的人有用 – dreab

21

也許最簡單的方法正在使用subplot2grid,描述爲i n Customizing Location of Subplot Using GridSpec

ax = plt.subplot2grid((2, 2), (0, 0)) 

等於

import matplotlib.gridspec as gridspec 
gs = gridspec.GridSpec(2, 2) 
ax = plt.subplot(gs[0, 0]) 

所以BMU的示例變爲:

import numpy as np 
import matplotlib.pyplot as plt 

# generate some data 
x = np.arange(0, 10, 0.2) 
y = np.sin(x) 

# plot it 
fig = plt.figure(figsize=(8, 6)) 
ax0 = plt.subplot2grid((1, 3), (0, 0), colspan=2) 
ax0.plot(x, y) 
ax1 = plt.subplot2grid((1, 3), (0, 2)) 
ax1.plot(y, x) 

plt.tight_layout() 
plt.savefig('grid_figure.pdf') 
154

的另一種方法是使用subplots函數並傳遞寬度比與gridspec_kw

import numpy as np 
import matplotlib.pyplot as plt 

# generate some data 
x = np.arange(0, 10, 0.2) 
y = np.sin(x) 

# plot it 
f, (a0, a1) = plt.subplots(1,2, gridspec_kw = {'width_ratios':[3, 1]}) 
a0.plot(x,y) 
a1.plot(y,x) 

f.tight_layout() 
f.savefig('grid_figure.pdf') 
+20

其實我最喜歡這個選項,我很高興我滾動到底部:) – astrojuanlu

+1

感謝您的支持! 'plt.subplots'做事情的方式更加簡潔。 –

+2

我喜歡subpots比gridspec更好,因爲您不必再​​處理設置軸上的列表(gridspec,您仍然需要使軸和圖一個接一個)。所以小區更清潔,使用速度更快 –