xticks中的pyqtgraph字符串相互重叠

时间:2018-03-05 10:01:45

标签: python qt pyqt pyqtgraph

我得到了这个直方图:

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_())

看起来像这样:

histogram

我的问题是:有哪些选项可以更好地显示xticks?

我可以根据缩放显示一些刻度,我发现AxisItem.textFillLimits,但它没有任何效果,我在哪里放?这就是我试过的:

self.getPlotItem().axes['bottom']['item'].setStyle(textFillLimits=[(0, 0.8), (2, 0.6), (4, 0.4), (6, 0.2)])

理想情况下,xticks应该旋转45度,但我没有找到任何关于如何做到这一点的线索。任何提示?

1 个答案:

答案 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]])