如何在pyqtgraph中的一个轴上绘制两个barh?

时间:2016-04-11 14:06:14

标签: python pyqtgraph

我需要这样的东西: enter image description here 演示数据:

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

matplotlib的同一个问题是:how to plot two barh in one axis 但pyqtgraph中没有ax.twiny()。还有别的吗?

1 个答案:

答案 0 :(得分:1)

我找到了一个Widgets" BarGraphItem ",它没有写在官方文档(PyQtGraph’s Widgets List)中。它可以" 旋转()"像matplotlib一样做barh。它不完美但有效! 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)