Pyqtgraph强制轴标签有小数点

时间:2017-11-26 19:38:31

标签: python plot pyqtgraph

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

enter image description here

您会注意到,在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) 

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

1 个答案:

答案 0 :(得分:1)

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

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

PyQtGraph - How to set intervals of axis

我缩小了set_plotstyle方法中的字体大小,以使值在图中不重叠。

使用Jupyter笔记本在Linux Mint下使用Python 3.6进行测试。如果您还使用Jupyter笔记本,请使用%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_()