Ich muss einer Figur zwei Nebenhandlungen hinzufügen. Eine Teilfläche muss etwa dreimal so breit sein wie die zweite (gleiche Höhe). Ich habe dies erreicht mit GridSpec
und die colspan
Argument, aber ich würde dies gerne mit figure
damit ich sie im PDF-Format speichern kann. Ich kann die erste Zahl mit der Funktion figsize
Argument im Konstruktor, aber wie kann ich die Größe des zweiten Plots ändern?
Antworten
Zu viele Anzeigen?- Ab dem
matplotlib 3.6.0
,width_ratios
yheight_ratios
können nun direkt als Schlüsselwortargumente anplt.subplots
ysubplot_mosaic
gemäß Was ist neu in Matplotlib 3.6.0 (15. September 2022) .
f, (a0, a1) = plt.subplots(1, 2, width_ratios=[3, 1])
f, (a0, a1, a2) = plt.subplots(3, 1, height_ratios=[1, 1, 3])
-
Eine andere Möglichkeit ist die Verwendung der
subplots
Funktion und übergeben Sie das Breitenverhältnis mitgridspec_kw
- matplotlib Tutorial: Anpassen von Figurenlayouts mit GridSpec und anderen Funktionen
matplotlib.gridspec.GridSpec
hat verfügbargridspect_kw
Optionen
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')
-
Da es sich um eine kanonische Frage handelt, hier ein Beispiel mit vertikalen Teilbildern.
plot it
f, (a0, a1, a2) = plt.subplots(3, 1, gridspec_kw={'height_ratios': [1, 1, 3]})
a0.plot(x, y) a1.plot(x, y) a2.plot(x, y)
f.tight_layout()
Sie können verwenden gridspec
y figure
:
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')
Ich habe pyplot
's axes
Objekt, um die Größen manuell anzupassen, ohne 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()
Der einfachste Weg ist wahrscheinlich die Verwendung von subplot2grid
, beschrieben in Anpassen der Position von Teilplots mit GridSpec .
ax = plt.subplot2grid((2, 2), (0, 0))
ist gleich
import matplotlib.gridspec as gridspec
gs = gridspec.GridSpec(2, 2)
ax = plt.subplot(gs[0, 0])
so wird das Beispiel der 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')
- See previous answers
- Weitere Antworten anzeigen