So setzen Sie xlim und ylim für einen Subplot in matplotlib [duplicate]

Lesezeit: 3 Minuten

Benutzer-Avatar
Cupitor

Ich möchte die X- und Y-Achse in Matplotlib für eine bestimmte Unterhandlung einschränken. Die Subplot-Figur selbst hat keine Achseneigenschaft. Ich möchte zum Beispiel nur die Grenzen für den zweiten Plot ändern:

import matplotlib.pyplot as plt
fig=plt.subplot(131)
plt.scatter([1,2],[3,4])
fig=plt.subplot(132)
plt.scatter([10,20],[30,40])
fig=plt.subplot(133)
plt.scatter([15,23],[35,43])
plt.show()

  • Ihre Frage war nicht klar, ich kann mir 4 oder 5 Möglichkeiten vorstellen, etwas so Einfaches mit Nebenhandlungen einzurichten.

    – tacaswell

    7. April 2013 um 2:34 Uhr

  • Wenn Sie sich vorstellen können, auf 4 oder 5 Arten einzurichten, zeigt dies, dass Sie die Frage bereits von Anfang an verstanden haben.

    – Cupitor

    7. April 2013 um 2:36 Uhr

  • Weil ich vermutete, dass Sie einige Lücken in Ihrem Verständnis der Klassenhierarchie von mpl haben (was Ihre Variablennamen bestätigen). Daher profitieren Sie am meisten, wenn ich Ihnen zeigen kann, wie Sie Ihren bereits vorhandenen Code anpassen können.

    – tacaswell

    7. April 2013 um 2:50 Uhr

Benutzer-Avatar
Tacaswell

Sie sollten die OO-Schnittstelle zu matplotlib verwenden und nicht die State-Machine-Schnittstelle. Fast alle plt.* Funktion sind dünne Hüllen, die im Grunde funktionieren gca().*.

plt.subplot gibt ein zurück axes Objekt. Sobald Sie einen Verweis auf das Achsenobjekt haben, können Sie direkt darauf plotten, seine Grenzen ändern usw.

import matplotlib.pyplot as plt

ax1 = plt.subplot(131)
ax1.scatter([1, 2], [3, 4])
ax1.set_xlim([0, 5])
ax1.set_ylim([0, 5])


ax2 = plt.subplot(132)
ax2.scatter([1, 2],[3, 4])
ax2.set_xlim([0, 5])
ax2.set_ylim([0, 5])

und so weiter für beliebig viele Achsen.

oder besser, packen Sie alles in eine Schleife:

import matplotlib.pyplot as plt

DATA_x = ([1, 2],
          [2, 3],
          [3, 4])

DATA_y = DATA_x[::-1]

XLIMS = [[0, 10]] * 3
YLIMS = [[0, 10]] * 3

for j, (x, y, xlim, ylim) in enumerate(zip(DATA_x, DATA_y, XLIMS, YLIMS)):
    ax = plt.subplot(1, 3, j + 1)
    ax.scatter(x, y)
    ax.set_xlim(xlim)
    ax.set_ylim(ylim)

  • Das Problem beim Beibehalten der Achseninstanz besteht darin, dass sie nicht alle Eigenschaften hat, die plt hat, zum Beispiel kann man axis.ylim() nicht verwenden, um den Ylim des Diagramms auf einer Achse zu erhalten.

    – schneidig

    21. Januar 2014 um 19:09 Uhr

  • @dashesy Sie verwenden set_xlim und set_ylim. plt hat viele weniger Optionen, als direkt mit dem Achsenobjekt zu arbeiten. Tatsächlich ist fast jede Funktion in plt ist eine sehr dünne Hülle, die zuerst ruft ax = plt.gca() und ruft dann irgendeine Funktion für dieses Objekt auf. Sie sollten nicht verwenden plt für alles andere als interaktives Arbeiten.

    – tacaswell

    21. Januar 2014 um 19:12 Uhr

  • Ja, ich stimme zu, es ist vorzuziehen, sich nicht auf die interaktive Version zu verlassen, aber es gibt keine Möglichkeit dazu erhalten das Ylim eines Plots mit nur einer Achse. Nachdem ein Diagramm fertig ist, wird es eine haben automatisch ylim zugewiesen, aber die Achse hat diese Information nicht. Wenn also letztere Zeichnungen vom Ylim abhängen, muss man, wie Sie sagten, set_ylim setzen, um den aktuellen Bereich zu überschreiben.

    – schneidig

    21. Januar 2014 um 21:45 Uhr


  • Entschuldigung, ich habe das bisschen Magie vergessen plt.ylim. Da ist auch ein get_ylim() Funktion auf der axes die die Grenzen zurückgeben und ax.get_yaxis() Funktion, die Ihnen die zurückgibt axis (Beachten Sie den Unterschied zwischen axes und axis). Es gibt auch die symmetrischen Versionen für die x-Achse.

    – tacaswell

    21. Januar 2014 um 21:55 Uhr

  • @aderchox, weil sie sich in verschiedenen Namespaces befinden. plt.xlim und plt.ylim sind in matplotlib.pyplot und ax.set_xlim und ax.set_ylim sind Methoden auf der Axes Objekt. In fast allen Fällen sollten Sie lieber die Axes-Methoden als Pyplot verwenden.

    – tacaswell

    1. April 2020 um 16:51 Uhr

1054120cookie-checkSo setzen Sie xlim und ylim für einen Subplot in matplotlib [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy