我试图让我的轴标签都有小数点,即使它们碰巧是整数。见下图。
您会注意到,在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)
如果可能,我想在此方法中设置此功能。谢谢!
答案 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_()