2012-09-06 5 views
24

Ich habe Zähldaten (eine 100 von ihnen), jeder entspricht einem Fach (0 bis 99). Ich muss diese Daten als Histogramm darstellen. Das Histogramm zählt diese Daten jedoch und wird nicht korrekt dargestellt, da meine Daten bereits gruppiert sind.Python Plot einfaches Histogramm gegeben Binned Daten

import random 
import matplotlib.pyplot as plt 
x = random.sample(range(1000), 100) 
xbins = [0, len(x)] 
#plt.hist(x, bins=xbins, color = 'blue') 
#Does not make the histogram correct. It counts the occurances of the individual counts. 

plt.plot(x) 
#plot works but I need this in histogram format 
plt.show() 
+0

Sie könnten den Code in dieser [Antwort] verwenden (http://stackoverflow.com/a/37559471/2087463) oder diese [Antwort] (http://stackoverflow.com/a/37548733/2087463) als Beispiel für die Darstellung bereits klassierter Daten als Histogramme. – tmthydvnprt

Antwort

33

Wenn ich zu verstehen, was Sie das folgende richtig, dann sollten Sie erreichen wollen, was Sie wollen:

import matplotlib.pyplot as plt 
plt.bar(range(0,100), x) 
plt.show() 

Es ist nicht hist() nicht verwenden, aber es sieht aus wie Sie Ihre Daten bereits gesetzt haben in Mülleimer, so dass es keine Notwendigkeit gibt.

+0

Danke redrah. Es half – Curious

+0

Wenn Sie möchten, dass die 'bar' mehr wie die' hist' Ausgabe aussieht, verwenden Sie den Code in dieser [Antwort] (http://stackoverflow.com/a/37559471/2087463) oder diese [Antwort] (http: //stackoverflow.com/a/37548733/2087463) als Beispiel für das Zeichnen von Histogrammen über das 'bar'-Diagramm. – tmthydvnprt

0

Werfen Sie einen Blick auf das Histogramm examples in der matplotlib Dokumentation. Sie sollten die hist Funktion verwenden. Wenn es standardmäßig nicht das erwartete Ergebnis liefert, dann spielen Sie mit den Argumenten hist herum und bereiten Sie Ihre Daten vor, bevor Sie sie an hist senden. Es ist mir nicht wirklich klar, was Sie erreichen wollen, deshalb kann ich an dieser Stelle nicht helfen.

+0

nach dem Versuch für eine Weile habe ich diese Frage gestellt. Meine einzige Sorge ist, wenn ich erreichen kann, was der obige Code mit der Hist-Funktion macht. – Curious

12

Das Problem ist mit Ihren Xbins. Sie haben derzeit

xbins = [0, len(x)] 

, die Ihnen die Liste [0, 100] geben wird. Das bedeutet, dass Sie nur 1 (nicht 2) unterhalb von 0 und darüber durch 100 begrenzt sehen. Ich bin nicht ganz sicher, was Sie von Ihrem Histogramm erwarten. Wenn Sie 2 ungleichmäßig Abstand Bins haben wollen, können Sie

xbins = [0, 100, 1000] 

verwenden, um alles unter 100 in einem Behälter zu zeigen, und alles andere in den anderen bin. Eine andere Option wäre, einen Integer-Wert zu verwenden, um eine bestimmte Anzahl von gleichmäßigen Bins zu erhalten. Mit anderen Worten tun

plt.hist(x, bins=50, color='blue') 

wo bins ist die Anzahl der gewünschten Bins.

Auf eine Randnotiz, wann immer ich mich nicht erinnern kann, wie man etwas mit Matplotlib macht, werde ich normalerweise einfach auf thumbnail gallery gehen und ein Beispiel finden, das mehr oder weniger aussieht, was ich zu erreichen versuche. Diese Beispiele haben alle begleitenden Quellcode, so dass sie sehr hilfreich sind. Die documentation für Matplotlib kann auch sehr praktisch sein.

2

Ich bin ziemlich sicher, dass Ihr Problem die Mülleimer ist. Es ist keine Liste von Grenzen, sondern eine Liste von Fachkanten.

xbins = [0,len(x)] 

kehrt in Ihrem Fall eine Liste mit [0, 100] an, dass Sie eine bin Kante bei 100 auf 0 und ein wünschen Sie ein Fach von 0 bis 100. So bekommen, was Sie wollen, ist:

xbins = [x for x in range(len(x))] 

Welche zurück:

[0,1,2,3, ... 99] 

, die den Behälter zeigt Kanten Sie wollen.

7

Cool, danke! Hier ist, was ich denke, die OP tun wollte:

import random 
import matplotlib.pyplot as plt 
x=[x/1000 for x in random.sample(range(100000),100)] 
xbins=range(0,len(x)) 
plt.hist(x, bins=xbins, color='blue') 
plt.show() 
0

Sie dies mit matplotlib des hist auch erreichen können, keine Notwendigkeit für numpy.Sie haben die Bins im Wesentlichen bereits als xbins angelegt. In diesem Fall werden x Ihre Gewichte sein.

plt.hist(xbins,weights=x)