2017-03-15 2 views
0

Ich lerne, wie Subplots zu verwenden. Zum Beispiel:Wie matplotlib.pyplot Unterplots erstellen, die sich überschneiden?

import numpy 
import matplotlib.pyplot as plt 

plt.figure(1) 
plt.subplot(221) 
plt.subplot(222) 
plt.subplot(223) 

plt.show() 

plt.close(1) 

Ich bekomme 3 Nebenhandlungen in figure1

Jetzt will ich mit den anderen Handlungsstränge innerhalb der ersten eine große subplot machen. Ich habe versucht:

plt.figure(1) 
plt.subplot(111) 
plt.subplot(222) 
plt.subplot(223) 

Aber der erste Teilplot verschwindet.

Meine Frage: Ist es möglich, Subplots zu überlappen?

danke

Antwort

1

Es ist nicht möglich, plt.subplots() zu verwenden überlappende Nebenhandlungen zu erstellen. Auch plt.subplot2grid wird nicht funktionieren.

Sie können sie jedoch mit der Methode figure.add_subplot() erstellen.

import matplotlib.pyplot as plt 
fig = plt.figure(1) 
fig.add_subplot(111) 
fig.add_subplot(222) 
fig.add_subplot(223) 

plt.show() 

enter image description here

+0

Beide Methoden sind sehr interessant (add_subplot und add_axes). Aber add_subplot ist genau die Antwort, nach der ich gesucht habe. Gibt es einen Vorteil mit dem einen oder anderen? – daniel

+0

Sie sind sehr unterschiedlich. 'add_subplot' erstellt eine Achse nach einem Raster. Der Vorteil besteht darin, dass das Gitter später modifiziert werden kann und die Achsen daran haften, z. man kann 'plt.tight_layout()' oder 'ptplots_adjust' aufrufen. Im Gegensatz dazu fügt add_axes die Achsen an die angegebene Position. Es wird dann bleiben, wo es ist. Dies kann je nach Fall ein Vorteil oder ein Nachteil sein. – ImportanceOfBeingErnest

3

Wenn Sie eine totale Kontrolle über die Nebenhandlungen Größe und Position möchten, verwenden Sie stattdessen Matplotlib add_axes Methode.

import matplotlib.pyplot as plt 

fig = plt.figure(figsize=(6, 4)) 

ax1 = fig.add_axes([0.1, 0.1, 0.85, 0.85]) 
ax2 = fig.add_axes([0.4, 0.6, 0.45, 0.3]) 
ax3 = fig.add_axes([0.6, 0.2, 0.2, 0.65]) 

ax1.text(0.01, 0.95, "ax1", size=12) 
ax2.text(0.05, 0.8, "ax2", size=12) 
ax3.text(0.05, 0.9, "ax3", size=12) 

plt.show() 

Imgur

Verwandte Themen