2017-11-12 1 views
0

Ich habe einen Pandas-Datenrahmen mit 2 Spalten "Höhe" und "Klasse, Klasse ist eine Spalte mit 3 Werten 1,2 und 5. Jetzt möchte ich ein Histogramm der Höhe Daten und Farbe von machen Klasse. plot19_s["vegetation height"].plot.hist(bins = 10)Histogramm Farbe nach Klasse

das ist mein Histogramm

aber jetzt möchte ich durch eine Änderung der Farbe im Histogramm die verschiedenen Klassen sehen.

+0

Werfen Sie einen Blick auf diese Lösung: https://stackoverflow.com/questions/19584029/plotting-histograms-from-grouped-data-in-a-pandas-dataframe –

+1

Mögliche doppelte von [Plotten von Histogrammen aus gruppierten Daten in einem Pandas DataFrame] (https://stackoverflow.com/questions/19584029/plotten-histograms-from-grouped-data-in-a-pandas-dataframe) –

+0

@JohannesWachs Würdest du mir etwas erzählen In wie weit ist das ein Duplikat? Welche der Lösungen für die verknüpfte Frage würde hier gelten? (Ich bin immer dafür, Dupes zu schließen, aber ich kann derzeit nicht sehen, welche davon helfen würde, ein gestapeltes Histogramm zu erstellen.) – ImportanceOfBeingErnest

Antwort

0

Da ich nicht sicher bin, ob das potentielles Duplikat icate beantwortet hier die Frage, das ist ein Weg, um ein gestapeltes Histogramm unter Verwendung der numpy.histogram und Matplotlib bar Handlung zu erzeugen.

import pandas as pd 
import numpy as np;np.random.seed(1) 
import matplotlib.pyplot as plt 

df = pd.DataFrame({"x" : np.random.exponential(size=100), 
        "class" : np.random.choice([1,2,5],100)}) 

_, edges = np.histogram(df["x"], bins=10) 
histdata = []; labels=[] 
for n, group in df.groupby("class"): 
    histdata.append(np.histogram(group["x"], bins=edges)[0]) 
    labels.append(n) 

hist = np.array(histdata) 
histcum = np.cumsum(hist,axis=0) 

plt.bar(edges[:-1],hist[0,:], width=np.diff(edges)[0], 
      label=labels[0], align="edge") 

for i in range(1,len(hist)): 
    plt.bar(edges[:-1],hist[i,:], width=np.diff(edges)[0], 
      bottom=histcum[i-1,:],label=labels[i], align="edge") 

plt.legend(title="class") 
plt.show() 

enter image description here

+0

Danke, ist es möglich, die X- und Y-Achse zu tauschen. Damit liegt die Frequenz auf der x-Achse. –

+0

Ja, Sie müssen 'bar' durch' barh', 'width' durch' height' und 'bottom' durch' left' ersetzen. – ImportanceOfBeingErnest