it-swarm.com.de

Matplotlib verschiedene Größe Untergrundstücke

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?

193
Jason Strimpel

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

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

resulting plot

202
bmu

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

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()
26
Jason Strimpel