2016-03-21 7 views
1

Ich habe eine einfache Pandas Datenrahmen und Handlung wie folgt aus:Matplotlib, mehrere einzelne hline auf BarPlot von einem Pandas Datenrahmen Plotten

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

test_df_1 = pd.DataFrame(np.random.random_integers(100, size=(10,2)), columns = ['COL_A', 'COL_B'], index=list('abcdefghij')) 
test_df_1.plot(kind='bar') 

Das in der folgenden Handlung führt:

enter image description here

Ich habe dann einen anderen Datenrahmen:

test_df_2 = pd.DataFrame(np.random.random_integers(100, size=(10,2)), columns = ['COL_A', 'COL_B'], index=list('abcdefghij')) 

Welches ist die gleichen Dimensionen wie mein erster Datenrahmen. Ich möchte über die Oberseite als einfache horizontale Linien zeichnen, wie die folgende Mock-up:

enter image description here

Wie kann ich das erreichen? Ich weiß von axhline, aber ich weiß nicht, wie ich es in diesem Fall anwenden kann, um zu erreichen, was ich will.

Antwort

2

Ich kann keine bessere Methode denken, aber Sie können die Informationen der Stäbe von ax.patches erhalten:

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

test_df_1 = pd.DataFrame(np.random.random_integers(100, size=(10,2)), columns = ['COL_A', 'COL_B'], index=list('abcdefghij')) 
ax = test_df_1.plot(kind='bar') 
test_df_2 = pd.DataFrame(np.random.random_integers(100, size=(10,2)), columns = ['COL_A', 'COL_B'], index=list('abcdefghij')) 

x = np.array([r.get_x() for r in ax.patches]) 
w = np.array([r.get_width() for r in ax.patches]) 

ax.hlines(test_df_2.values.T.ravel(), x, x + w, color="red", lw=2) 

Hier ist die Ausgabe:

enter image description here

Verwandte Themen