2016-04-11 3 views
1

Ich brauche etwas wie folgt aus: enter image description here Demo-Daten:wie zwei barh in einer Achse in pyqtgraph plotten?

bottom10 
Out[12]: 
0 -9.823127e+08 
1 -8.069270e+08 
2 -6.030317e+08 
3 -5.709379e+08 
4 -5.224355e+08 
5 -4.755464e+08 
6 -4.095561e+08 
7 -3.989287e+08 
8 -3.885740e+08 
9 -3.691114e+08 
Name: amount, dtype: float64 

top10 
Out[13]: 
0 9.360520e+08 
1 9.078776e+08 
2 6.603838e+08 
3 4.967611e+08 
4 4.409362e+08 
5 3.914972e+08 
6 3.547471e+08 
7 3.538894e+08 
8 3.368558e+08 
9 3.189895e+08 
Name: amount, dtype: float64 

Die gleiche Frage für matplotlib ist hier: how to plot two barh in one axis Aber es gibt keine ax.twiny() in pyqtgraph. Irgendein anderer Weg?

Antwort

1

Ich fand eine Widgets "BarGraphItem", die nicht in offiziellen Dokumentation (PyQtGraph’s Widgets List) geschrieben. Es kann "rotieren()", um Barh wie Matplotlib zu machen. Es ist nicht perfekt, aber funktioniert! enter image description here

import pyqtgraph as pg 
import pandas as pd 
import numpy as np 

bottom10 = pd.DataFrame({'amount':-np.sort(np.random.rand(10))}) 
top10 = pd.DataFrame({'amount':np.sort(np.random.rand(10))[::-1]}) 
maxtick=max(top10.amount.max(),-bottom10.amount.min())*1.3 

win1 = pg.plot() 
axtop=pg.BarGraphItem(x=range(len(top10)),height=top10.amount,width=0.6,brush='r') 
axtop.rotate(-90) 
win1.addItem(axtop) 
axbt=pg.BarGraphItem(x=range(len(top10)),height=-bottom10.amount,y0=maxtick+bottom10.amount,width=0.6,brush='g') 
axbt.rotate(-90) 
win1.addItem(axbt)