【问题标题】:Pyqtgraph force axis labels to have decimal pointsPyqtgraph 强制轴标签有小数点
【发布时间】:2018-05-10 01:25:09
【问题描述】:

我试图让我的轴标签都有小数点,即使它们恰好是整数。见下图。

您会注意到,在 x 轴上,只要值是整数,它就不再显示小数。我想把“1”读成“1.0”。

我有一种方法可以设置我的情节风格。它读起来像这样

情节风格1

def set_plotstyle(p1, style):
    if style == 1:
        axlabel_font = QtGui.QFont()
        axlabel_font.setPixelSize(20)

        p1.showAxis('right')
        p1.showAxis('top')

        p1.showLabel('right', show=False)
        p1.showLabel('top', show=False)

        p1.showGrid(x=False, y=False)
        p1.setLogMode(x=False, y=False)
        p1.getAxis('left').tickFont = axlabel_font
        p1.getAxis('bottom').tickFont = axlabel_font
        p1.getAxis('left').labelFont = axlabel_font
        p1.getAxis('bottom').setHeight(70)
        p1.getAxis('left').setWidth(100)
        p1.getAxis('right').setWidth(60)
        p1.getAxis('left').setStyle(tickTextOffset=15)
        p1.getAxis('bottom').setStyle(tickTextOffset=15)
        p1.getAxis('top').setStyle(showValues=False)
        p1.getAxis('right').setStyle(showValues=False) 

如果可能,我想在此方法中设置此功能。谢谢!

【问题讨论】:

    标签: python plot pyqtgraph


    【解决方案1】:

    请在下面找到示例代码,该示例代码显示 x 和 y 值,但只有一个小数位。我修改了 set_plotstyle 方法,使其也接受正在绘制的 x 和 y 值。这不是您所要求的,但我希望它有所帮助。

    x 和 y 值被转换为使用 setTicks 分配给刻度值的格式化字符串。一位小数的字符串格式命令是 .1f。该想法和示例代码基于此stackoverflow答案:

    PyQtGraph - How to set intervals of axis

    我在你的 set_plotstyle 方法中减小了字体大小,这样值就不会在图中重叠。

    这是在 Linux Mint 下使用 Jupyter notebook 使用 Python 3.6 进行测试的。如果您还使用 Jupyter notebook,请使用 %gui 内联魔法来显示绘图。

    import pyqtgraph as pg
    import numpy as np
    from pyqtgraph.Qt import QtCore, QtGui
    
    def set_plotstyle(p1, x_vals, y_vals, style):
        if style == 1:
            axlabel_font = QtGui.QFont()
            axlabel_font.setPixelSize(15)
    
            p1.showAxis('right')
            p1.showAxis('top')
    
            p1.showLabel('right', show=False)
            p1.showLabel('top', show=False)
    
            p1.showGrid(x=False, y=False)
            p1.setLogMode(x=False, y=False)
            p1.getAxis('left').tickFont = axlabel_font
            p1.getAxis('bottom').tickFont = axlabel_font
            p1.getAxis('left').labelFont = axlabel_font
            p1.getAxis('bottom').setHeight(70)
            p1.getAxis('left').setWidth(100)
            p1.getAxis('right').setWidth(60)
            p1.getAxis('left').setStyle(tickTextOffset=15)
            p1.getAxis('bottom').setStyle(tickTextOffset=15)
            p1.getAxis('top').setStyle(showValues=False)
            p1.getAxis('right').setStyle(showValues=False) 
    
            ax = p1.getAxis('bottom')
            dx = [(value, '{:.1f}'.format(value)) for value in x_vals]
            ax.setTicks([dx, []])
    
            ay = p1.getAxis('left') 
            dy = [(value, '{:.1f}'.format(value)) for value in y_vals]
            ay.setTicks([dy, []])
        return p1
    
    app = pg.mkQApp()
    
    pw = pg.PlotWidget(title="Example")
    x = np.arange(7)
    y = x**2/150
    pw.plot(x=x, y=y, symbol='o')
    pw.show()
    pw.setWindowTitle('Example')
    set_plotstyle(pw, x, y, 1)
    
    
    if __name__ == '__main__':
        import sys
    
        if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
    

    【讨论】:

      猜你喜欢
      • 2017-10-02
      • 2015-04-29
      • 1970-01-01
      • 2020-02-19
      • 2017-06-25
      • 2019-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多