2017-02-09 39 views
6

Używam następujący kod do wykreślenia bar-chart:matplotlib: Działka wiele kolumn pandy ramki danych na pasku wykresu

import matplotlib.pyplot as pls 
my_df.plot(x='my_timestampe', y='col_A', kind='bar') 
plt.show() 

Działka działa dobrze. Jednak chcę poprawić wykres, mając 3 kolumny: "col_A", "col_B" i "col_C" wszystkie na wykresie. Podobnie jak w przykładzie przedstawionym na Figurze poniżej:

enter image description here

Chciałbym col_A wyświetlany na niebiesko powyżej osi x col_B na czerwono poniżej osi x i col_C na zielono osi x. Czy jest to możliwe w matplotlib? Jak wprowadzić zmiany w wykreślaniu wszystkich trzech kolumn? Dzięki!

Odpowiedz

19

Można wykreślić wiele kolumn jednocześnie, podając listę nazw kolumn do argumentu plot 's y.

df.plot(x="X", y=["A", "B", "C"], kind="bar") 

enter image description here

To będzie produkować wykres gdzie bary siedzą obok siebie.

W celu ich nakładania, trzeba by zadzwonić plot kilka razy, i dostarczanie osie wykreślić jako argument ax do działki.

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 

y = np.random.rand(10,4) 
y[:,0]= np.arange(10) 
df = pd.DataFrame(y, columns=["X", "A", "B", "C"]) 

ax = df.plot(x="X", y="A", kind="bar") 
df.plot(x="X", y="B", kind="bar", ax=ax, color="C2") 
df.plot(x="X", y="C", kind="bar", ax=ax, color="C3") 

plt.show() 

enter image description here

+0

Drugi wykres bani bo nie widać kolor niebieski i zielony w 3 kolumnie. Możliwa jest zmiana, aby zobaczyć zdarzenie o niższej wartości, gdy ostatnia jest tak wysoka. – hudi

+0

Drugi wykres ma sens tylko wtedy, gdy najwyższe wartości są wartościami z pierwszej kolumny wydrukowanej dla wszystkich słupków. Wydaje się, że jest tak w przypadku pożądanego wyniku z pytania. W przeciwnym razie nie polecałbym używania tego rodzaju wykresu i zamiast tego używałbym ułożonego wykresu lub zgrupowanych prętów z pierwszego rozwiązania tutaj. Oczywiście można eksperymentować z przezroczystością ("alpha") i sprawdzić, czy to ostatnie rozwiązanie daje interesujący wynik. – ImportanceOfBeingErnest

+0

ah ok thx za wyjaśnienie – hudi