Ich versuche, einige Daten effektiv zu plotten, damit ich sie visualisieren kann, aber ich habe einige Schwierigkeiten. Ich habe zwei Werte. Einer davon ist diskret (0 oder 1) und heißt label
. Der andere ist ein kontinuierlicher Wert irgendwo zwischen 0 und 1. Ich möchte ein Histogramm erstellen, bei dem auf der X-Achse zahlreiche Balken wären, zum Beispiel einer für jede .25 der Daten, also vier Balken, wobei der erste den Wert von 0-0.25 hat, der zweite 0.25-0.5, der dritte 0.5-0.75 und der vierte 0.75-1.
Die y-Achse wird dann je nachdem, ob das Label eine 1 oder eine 0 ist, aufgeteilt, sodass wir ein Diagramm wie dieses erhalten:
Wenn es effektive, intelligente Möglichkeiten gibt, meine Daten aufzuteilen (statt nur vier Balken für diese Werte fest einzuprogrammieren), wäre ich auch daran interessiert, obwohl das wahrscheinlich eine weitere Frage rechtfertigt. Ich werde sie posten, wenn ich den Code dafür habe.
Ich habe beide Werte in numpy-Arrays gespeichert, wie folgt, bin mir aber unsicher, wie ich solche Diagramme plotten kann:
import numpy as np
import pylab as P
variable_values = trainData.get_vector('variable') # gibt ein eindimensionales numpy-Array von Werten zurück
label_values = trainData.get_vector('label')
x = alchemy_category_score_values[alchemy_category_score_values != '?'].astype(float) # Entfernen von leeren Werten
y = label_values[alchemy_category_score_values != '?'].astype(float)
fig = plt.figure()
plt.title("Histogramm der Merkmalsaufschlüsselung")
plt.xlabel("Variable")
plt.xlim(0, 1)
plt.ylabel("Label")
plt.ylim(0, 1)
xvals = np.linspace(0,1,.02)
plt.show()
Tutorial zu matplotlib zeigt den folgenden Code, um grob zu erreichen, was ich möchte, aber ich verstehe nicht wirklich, wie es funktioniert (LINK):
P.figure()
n, bins, patches = P.hist(x, 10, normed=1, histtype='bar', stacked=True)
P.show()
Jede Hilfe wird sehr geschätzt. Danke.
Bearbeiten:
Ich erhalte jetzt den Fehler:
AssertionError: unverträglichen Größen: Das Argument 'height' muss die Länge 5 oder Skalar haben
Ich habe meine beiden numpy-Arrays ausgegeben und sie sind gleich lang, eins ist diskret, das andere kontinuierlich. Hier ist der Code, den ich ausführe:
x = variable_values[variable_values != '?'].astype(float)
y = label_values[label_values != '?'].astype(float)
print x # Ausgabe der numpy-Arrays gleicher Größe, x ist kontinuierlich, y diskret. Beide jetzt vom Typ float.
print y
N = 5
ind = np.arange(N) # die x-Positionen für die Gruppen
width = 0.45 # die Breite der Balken: kann auch eine Sequenz der Länge der x-Werte sein
p1 = plt.bar(ind, y, width, color='r') # hier tritt der Fehler auf
p2 = plt.bar(ind, x, width, color='y',
bottom=x)
plt.ylabel('Punktzahlen')
plt.title('Punktzahlen nach Gruppe und Geschlecht')
plt.xticks(ind+width/2., ('G1', 'G2', 'G3', 'G4', 'G5') )
plt.yticks(np.arange(0,81,10))
plt.legend( (p1[0], p2[0]), ('Männer', 'Frauen') )
plt.show()