Ich muss einer Figur zwei Nebenhandlungen hinzufügen. Ein Untergrund muss ungefähr dreimal so breit sein wie der zweite (gleiche Höhe). Ich habe dies mit GridSpec
und dem Argument colspan
erreicht, aber ich möchte dies mit figure
tun, damit ich es als PDF speichern kann. Ich kann die erste Zahl mit dem Argument figsize
im Konstruktor anpassen, aber wie ändere ich die Größe des zweiten Diagramms?
Eine andere Möglichkeit besteht darin, die Funktion subplots
zu verwenden und das Breitenverhältnis mit gridspec_kw
Zu übergeben:
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')
Sie können gridspec
und figure
verwenden:
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')
Der wahrscheinlich einfachste Weg ist die Verwendung von subplot2grid
, beschrieben in Anpassen des Speicherorts der Teilzeichnung mit GridSpec .
ax = plt.subplot2grid((2, 2), (0, 0))
entspricht
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])
so wird bmus beispiel:
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')
Ich habe das pyplot
- Objekt von axes
verwendet, um die Größen manuell anzupassen, ohne GridSpec
zu verwenden:
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()