Pyqtgraph强制轴标签有小数点

Pyqtgraph force axis labels to have decimal points

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

您会注意到,在 x 轴上,只要值为整数,它就不再显示小数。我希望“1”读作“1.0”。

我有一个方法可以设置我的情节风格。它是这样写的

Plotstyle1

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) 

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

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

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

我在您的 set_plotstyle 方法中减小了字体大小,以便图中的值不会重叠。

这是使用 Python 3.6 在 Linux Mint 下使用 Jupyter 笔记本测试的。如果您还使用 Jupyter notebook,请使用 %gui inline magic 来显示绘图。

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