You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在pyqtgraph对数Y轴显示非科学计数法的实际刻度值?

嘿,很高兴看到你的第一个StackOverflow问题!别担心格式或者重复提问的事儿,我们都有第一次😉

针对你的需求——在pyqtgraph的对数Y轴上显示实际数值而非科学计数法,有两种简单的解决办法,我给你详细说说:

方法一:自定义刻度格式化函数(通用场景)

这个方法适合数据范围不确定的情况,它会自动把所有刻度数值转换成普通的整数/小数格式,避免科学计数法:

import pyqtgraph as pg
from pyqtgraph.Qt import QtGui

pg.mkQApp()
pw = pg.PlotWidget()
pw.show()

# 你的数据
myplot = pg.PlotDataItem([1,2,4,8,16,32,64,128])
p1 = pw.plotItem
p1.hideAxis('left')
p1.showAxis('right')

# 获取右侧轴对象并开启对数模式
right_axis = p1.getAxis('right')
right_axis.setLogMode(True)

# 自定义刻度格式化函数:把数值转成易读的普通格式
def format_ticks(value, *args):
    # 如果是整数就显示整数,否则保留两位小数
    if value.is_integer():
        return f"{int(value)}"
    return f"{value:.2f}"

# 把自定义函数应用到轴上
right_axis.setTickFormatter(pg.FuncFormatter(format_ticks))

# 添加数据到图中
p1.addItem(myplot)

# 保持窗口运行
if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

方法二:手动指定刻度与标签(精准匹配你的数据)

如果你的数据范围是确定的(比如就是2的幂),直接手动设置刻度对应的标签会更精准,完全符合你的需求:

import pyqtgraph as pg
from pyqtgraph.Qt import QtGui

pg.mkQApp()
pw = pg.PlotWidget()
pw.show()

# 你的数据
myplot = pg.PlotDataItem([1,2,4,8,16,32,64,128])
p1 = pw.plotItem
p1.hideAxis('left')
p1.showAxis('right')

# 获取右侧轴对象并开启对数模式
right_axis = p1.getAxis('right')
right_axis.setLogMode(True)

# 手动定义刻度值和对应的显示标签
custom_ticks = [
    [(1, '1'), (2, '2'), (4, '4'), (8, '8'), (16, '16'), (32, '32'), (64, '64'), (128, '128')]
]
# 应用自定义刻度
right_axis.setTicks(custom_ticks)

# 添加数据到图中
p1.addItem(myplot)

# 保持窗口运行
if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

两种方法都能解决你的问题,你可以根据自己的实际数据场景选择。如果后续还有其他pyqtgraph的问题,随时回来提问就好!

内容的提问来源于stack exchange,提问作者Joe Cat

火山引擎 最新活动