2017-05-11 5 views
3

Ich habe eine Funktion, die pyplot.plt so hüllt ich schnell Graphen mit oft verwendeten Standardwerte erstellen:Matplotlib ein Grundstück Objekt zurückkehr

def plot_signal(time, signal, title='', xlab='', ylab='', 
       line_width=1, alpha=1, color='k', 
       subplots=False, show_grid=True, fig_size=(10, 5)): 

    # Skipping a lot of other complexity here 

    f, axarr = plt.subplots(figsize=fig_size) 
    axarr.plot(time, signal, linewidth=line_width, 
       alpha=alpha, color=color) 
    axarr.set_xlim(min(time), max(time)) 
    axarr.set_xlabel(xlab) 
    axarr.set_ylabel(ylab) 
    axarr.grid(show_grid) 

    plt.suptitle(title, size=16) 
    plt.show() 

Es gibt jedoch Zeiten, in denen ich die Rückkehr der Lage sein wollen, würde plotten, damit ich manuell Dinge für ein bestimmtes Diagramm hinzufügen/bearbeiten kann. Zum Beispiel möchte ich in der Lage sein, die Achsenbeschriftungen zu ändern, oder eine zweite Linie auf dem Grundstück hinzuzufügen nach Aufruf der Funktion:

import numpy as np 

x = np.random.rand(100) 
y = np.random.rand(100) 

plot = plot_signal(np.arange(len(x)), x) 

plot.plt(y, 'r') 
plot.show() 

ich ein paar Fragen zu diesem gesehen habe (How to return a matplotlib.figure.Figure object from Pandas plot function? und AttributeError: 'Figure' object has no attribute 'plot') und als ein Ergebnis, das ich versucht habe folgendes am Ende der Funktion der Zugabe:

  • return axarr

  • return axarr.get_figure()

  • return plt.axes()

Doch sie alle liefern einen ähnlichen Fehler: AttributeError: 'AxesSubplot' object has no attribute 'plt'

Was ist der richtige Weg, um ein Grundstück Objekt zurückgeben, damit es später bearbeitet werden können?

+0

Haben Sie versucht, 'fig = plt.gcf()' zurückzukehren? –

+0

Hier ist alles korrekt, außer dass "plot.plt()' anstelle von 'plot.plot()' aufgerufen wird. Dummer Fehler; kann jedem passieren :) –

Antwort

2

Ich denke, der Fehler ist ziemlich selbsterklärend. So etwas wie pyplot.plt oder ähnliches gibt es nicht. plt ist die Quasi-Standard-Kurzform von Pyplot, wenn sie importiert wird, d. H. import matplotlib.pyplot as plt.

In Bezug auf das Problem ist der erste Ansatz return axarr der vielseitigste. Sie erhalten eine Achse oder eine Reihe von Achsen und können sich dazu bewegen.

kann der Code aussehen

def plot_signal(x,y, ..., **kwargs): 
    # Skipping a lot of other complexity her 
    f, ax = plt.subplots(figsize=fig_size) 
    ax.plot(x,y, ...) 
    # further stuff 
    return ax 

ax = plot_signal(x,y, ...) 
ax.plot(x2, y2, ...) 
plt.show() 
Verwandte Themen