2 Stimmen

Matplotlib: Datenbeschriftungen auf Daten zeichnen, die mit einer Parasitenachse verbunden sind

Dies ist eine Variation der Frage 'Wie zeige ich Datenbeschriftungen an?', die ich an einigen Stellen auf SO gesehen habe. Aber ich habe es noch nie auf einer Parasitenachse gemacht.

Im Grunde möchte ich Datenbeschriftungen über jedem Punkt der Zeitreihe (in grün) haben, die mit der (rechten) vertikalen Parasitenachse verbunden sind.

Das ist, was ich derzeit habe:

from mpl_toolkits.axes_grid1 import host_subplot
import matplotlib.pyplot as plt

Zeiten=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23]
plotreihenfolge=[239, 133, 94, 42, 31, 27, 49, 99, 172, 292, 397, 439, 450, 391, 429, 374, 382, None, None, None, None, None, None, None]
letztesjahrbestellungen=[119, 78, 49, 29, 14, 12, 30, 46, 108, 154, 194, 224, 181, 199, 213, 186, 167, 152, 135, 115, 99, 106, 97, 90]
unterschied=[100.8, 70.5, 91.8, 44.8, 121.4, 125.0, 63.3, 115.2, 59.3, 89.6, 104.6, 96.0, 148.6, 96.5, 101.4, 101.1, 128.7, None, None, None, None, None, None, None]
bestellungenMax=max(plotreihenfolge+letztesjahrbestellungen)
wachstumMax=max(unterschied)

host = host_subplot(111)

par = host.twinx()
host.set_xlabel("Stunde")
host.set_ylabel("Bestellungen")
par.set_ylabel("% Wachstum")
host.set_xlim(0,24)
host.set_ylim(0,bestellungenMax*1.1)
par.set_ylim(0,wachstumMax*2)
p1, = host.plot(Zeiten, plotreihenfolge, linewidth=2, marker='o', color='r', label="Heutige Bestellungen")
p1, = host.plot(Zeiten, letztesjahrbestellungen, linewidth=2, color='b', label="LY Bestellungen")
p2, = par.plot(Zeiten, unterschied, marker='s', color='green', label="% Wachstum")
leg = plt.legend()
plt.show()

Ich habe sowohl par.plot_text(Zeiten[1], unterschied[1], unterschied[1]) als auch par.annotate() ausprobiert, aber beide warfen Fehler aus, die besagen AttributeError: 'AxesParasite' Objekt hat kein Attribut 'plot_text'

Das ist, was ich derzeit habe:

Diagramm1

Ich möchte etwas Ähnliches wie dies (aus Excel):

DIAGRAMM 2

1voto

M4rtini Punkte 13276
for (x,y) in zip(zeiten, unterschied):
    if y:
         par.annotate("{0}%".format(y), xy=(x, y+10))

Dies scheint für mich zu funktionieren, was hast du für annotate versucht?

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