25 Stimmen

Achsengrenzen in Matplotlib-Pyplot festlegen

Ich habe zwei Nebenhandlungen in einer Figur. Ich möchte die Achsen der zweiten Teilgrafik so einstellen, dass sie die gleichen Grenzen hat wie die erste Teilgrafik (die sich je nach den gezeichneten Werten ändert). Kann mir bitte jemand helfen? Hier ist der Code:

import matplotlib.pyplot as plt

plt.figure(1, figsize = (10, 20))
## First subplot: Mean value in each period (mean over replications)
plt.subplot(211, axisbg = 'w')
plt.plot(time,meanVector[0:xMax], color = '#340B8C', 
         marker = 'x', ms = 4, mec = '#87051B', markevery = (asp, 
                                                             2*asp))
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45)
plt.axhline(y = Results[0], color = '#299967', ls = '--')
plt.ylabel('Mean Value')
plt.xlabel('Time')
plt.grid(True)

## Second subplot: moving average for determining warm-up period
## (Welch method)
plt.subplot(212)    
plt.plot(time[0:len(yBarWvector)],yBarWvector, color = '#340B8C')
plt.xticks(numpy.arange(0, T+1, jump), rotation = -45)
plt.ylabel('yBarW')
plt.xlabel('Time')
plt.xlim((0, T))
plt.grid(True)

Was sollten die Argumente für die zweite Teilhandlung sein? plt.ylim() Funktion? Ich habe versucht zu definieren

ymin, ymax = plt.ylim()

in der ersten Teilfläche und setzen dann

plt.ylim((ymin,ymax))

in der zweiten Nebenhandlung. Das hat aber nicht funktioniert, weil der zurückgegebene Wert ymax ist der maximale Wert, den die y Variable (Mittelwert) im ersten Subplot und nicht die obere Grenze der y-Achse.

Vielen Dank im Voraus.

14voto

Amro Punkte 122495

Die von Ihnen vorgeschlagene Lösung sollte funktionieren, insbesondere wenn die Diagramme interaktiv sind (sie bleiben synchron, wenn sich eines ändert).

Alternativ können Sie die y-Grenzen der zweiten Achse manuell so einstellen, dass sie mit denen der ersten Achse übereinstimmen. Beispiel:

from pylab import *

x = arange(0.0, 2.0, 0.01)
y1 = 3*sin(2*pi*x)
y2 = sin(2*pi*x)

figure()
ax1 = subplot(211)
plot(x, y1, 'b')

subplot(212)
plot(x, y2, 'g')
ylim( ax1.get_ylim() )        # set y-limit to match first axis

show()

alt text

12voto

Curious2learn Punkte 28623

Ich suchte einige mehr auf der matplotlib Website und fand einen Weg, es zu tun. Wenn jemand einen besseren Weg hat, lassen Sie mich bitte wissen.

In der ersten Nebenhandlung ersetzen plt.subplot(211, axisbg = 'w') por ax1 = plt.subplot(211, axisbg = 'w') . Fügen Sie dann im zweiten Teilplot die Argumente sharex = ax1 y sharey = ax1 für den Befehl subplot. Das heißt, der zweite Subplot-Befehl sieht jetzt so aus:

plt.subplot(212, sharex = ax1, sharey = ax1)

Damit ist das Problem gelöst. Aber wenn es andere bessere Alternativen gibt, lassen Sie es mich bitte wissen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X