Einfaches Diagramm mit Pyplot

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
felopy
User
Beiträge: 17
Registriert: Mittwoch 3. Juni 2015, 08:55

Hallo,

ich will mit Pyplot ein Diagramm erstellen, welches mir pro Tag in einer Liste, eine Laufzeit in Stunden anzeigt.
Mit der y-Achse habe ich auch soweit kein Problem, jedoch weiß ich nicht, wie ich die x-Achse mit den Daten erstellen kann.

So sieht es aus:

Code: Alles auswählen

x = x_array_list   #ist eigentlich ne Liste, kein array
y = y_array_list   #ist eigentlich ne Liste, kein array

plt.plot(x, y) 
plt.title('Laufzeiten von '+date_list[0]+" bis "+date_list[-1])
plt.xlabel('Tag')
plt.ylabel('Stunden')
plt.ylim(0,24)
plt.yticks([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])
plt.show()
Die Liste y_array_list beinhaltet die Stunden, dabei ist es egal ob es Integer oder Strings sind (ausprobiert), so sieht die Ausgabe aus:

Code: Alles auswählen

[0, 24, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0]

Die Liste x_array_list beinhaltet die Tage, hier weiß ich nicht genau wie es zu formatieren ist und wie ich es dann bei plt.xticks einstellen muss, sieht so aus:

Code: Alles auswählen

['02.18', '02.19', '02.20', '02.21', '02.22', '02.23', '02.24', '02.25', '02.26', '02.27', '02.28', '06.01', '06.02', '06.03', '06.04']
zu jedem x Wert gibt es genau ein y Wert, sollte doch eigentlich gar nicht so schwer sein damit ein schönes Balkendiagramm zu basteln, oder?
felopy
User
Beiträge: 17
Registriert: Mittwoch 3. Juni 2015, 08:55

Hab's mittlerweile hingekriegt.

Code: Alles auswählen

x = range(0, len(x_array_list))
y = y_array_list

plt.plot(x, y) 
plt.title('Laufzeiten von '+date_list[0]+" bis "+date_list[-1])
plt.xlabel('Tag')
plt.ylabel('Stunden')
plt.ylim(0,24)
plt.yticks([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24])
plt.xticks(x, x_array_list, rotation='vertical')
plt.show()
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

Mit Balken:

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt

x = ['02.18', '02.19', '02.20', '02.21', '02.22', '02.23', '02.24', '02.25', '02.26', '02.27', '02.28', '06.01', '06.02', '06.03', '06.04']
y = [0, 24, 0, 0, 0, 6, 0, 0, 0, 0, 7, 0, 0, 0, 3]
xpos = np.arange(len(x))

plt.figure()
plt.bar(xpos-.5, y)
plt.title('Laufzeiten von '+x[0]+" bis "+x[-1])
plt.xlabel('Tag')
plt.ylabel('Stunden')
plt.xlim(-1,16)
plt.xticks(xpos, x, rotation='vertical')
plt.show()
a fool with a tool is still a fool, www.magben.de, YouTube
felopy
User
Beiträge: 17
Registriert: Mittwoch 3. Juni 2015, 08:55

Danke,
soweit so gut.
Wenn ich nun allerdings viele Tage habe, wird es unlesbar auf der x-Achse.
Gibt es eine einfache Möglichkeit nur jedes 7te Label anzuzeigen?
Benutzeravatar
MagBen
User
Beiträge: 799
Registriert: Freitag 6. Juni 2014, 05:56
Wohnort: Bremen
Kontaktdaten:

felopy hat geschrieben:Gibt es eine einfache Möglichkeit nur jedes 7te Label anzuzeigen?

Code: Alles auswählen

plt.xticks(x[::7], x_array_list[::7], rotation='vertical')
a fool with a tool is still a fool, www.magben.de, YouTube
felopy
User
Beiträge: 17
Registriert: Mittwoch 3. Juni 2015, 08:55

Super, danke :)
Antworten