【问题标题】:pyqtgraph strings in xticks overlapping each otherxticks中的pyqtgraph字符串相互重叠
【发布时间】:2018-08-12 22:43:10
【问题描述】:

我得到了这个直方图:

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 度,但我没有找到任何关于如何执行此操作的线索。有什么提示吗?

【问题讨论】:

    标签: python qt pyqt pyqtgraph


    【解决方案1】:

    如果您为 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]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 1970-01-01
      • 2012-08-29
      • 2014-12-09
      • 2011-08-31
      相关资源
      最近更新 更多