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_()
我试图让我的轴标签都带有小数点,即使它们恰好是整数。见下图。
您会注意到,在 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_()