Matplotlib diferite dimensiuni subplots

Am nevoie pentru a adăuga două subplots la o cifră. Un subplot trebuie să fie de aproximativ trei ori mai mare ca cea de-a doua (aceeași înălțime). Am realizat acest lucru folosind GridSpec " și " colspan argument, dar aș dori să fac acest lucru folosind figura ca să pot salva în format PDF. Pot regla prima cifră, folosind figsize argument în constructor, dar cum pot schimba dimensiunea de-al doilea complot?

Comentarii la întrebare (1)
Soluția

Un alt mod este de a utiliza subplots funcția și de a trece lățime raport cu 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')
Comentarii (8)

Puteți utiliza gridspec și figura:

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')

Comentarii (0)

Probabil cel mai simplu mod este folosind subplot2grid, descris în Personalizarea Locație de Subplot Folosind GridSpec.

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

este egal cu

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

deci bmu's exemplu devine:

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')
Comentarii (0)

Am folosit pyplot's " axe " obiect pentru a regla manual dimensiuni, fără a utiliza 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()
Comentarii (2)