我得到了这个直方图:
import somewhere.pyqtgraph as pg
from PyQt5 import QtWidgets, QtGui, QtCore
import numpy as np
import sys
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
class HistogramWidget(pg.PlotWidget):
def __init__(self, parent=None):
pg.PlotWidget.__init__(self, parent=parent)
self.values = np.array([])
self.bins = np.linspace(0, 1, 10)
self.brush = (0, 0, 255, 255)
self.curve = None
self.names = []
self.getPlotItem().buttonsHidden = True
self.setStyleSheet("border: 1px solid gray")
def set_bins(self, bins, names):
self.bins = bins
self.names = names
self.xdict = dict(enumerate(names))
self.getPlotItem().axes['bottom']['item'].setTicks([self.xdict.items()])
def add_values(self, values):
self.values = np.append(self.values, values)
self.values = self.values.flatten()
self.y, self.x = np.histogram(self.values, bins=self.bins)
if self.curve is not None:
self.removeItem(self.curve)
self.curve = pg.PlotCurveItem(list(self.xdict.keys()), self.y, stepMode=True, fillLevel=0, brush=self.brush)
self.addItem(self.curve)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = HistogramWidget()
w.set_bins(np.linspace(-3, 8, 40), ['bin_'+str(i[0]) for i in enumerate(np.linspace(-3, 8, 40))])
w.add_values(np.hstack([np.random.normal(size=500), np.random.normal(size=260, loc=4)]))
w.show()
sys.exit(app.exec_())
看起来像这样:
我的问题是:有哪些选项可以更好地显示xticks?
我可以根据缩放显示一些刻度,我发现AxisItem.textFillLimits,但它没有任何效果,我在哪里放?这就是我试过的:
self.getPlotItem().axes['bottom']['item'].setStyle(textFillLimits=[(0, 0.8), (2, 0.6), (4, 0.4), (6, 0.2)])
理想情况下,xticks应该旋转45度,但我没有找到任何关于如何做到这一点的线索。任何提示?
答案 0 :(得分:0)
如果你给setTicks提供两个参数,那么第一个将是主要的滴答,第二个将是次要滴答,请参阅文档http://www.pyqtgraph.org/documentation/graphicsItems/axisitem.html#pyqtgraph.AxisItem.setTicks
要使其他每个刻度线成为次要刻度,您可以尝试
self.getPlotItem().axes['bottom']['item'].setTicks(
[list(self.xdict.items())[::2], list(self.xdict.items())[1::2]])