You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyQtGraph中如何将ImageItem的轴设置为指定值

解决PyQtGraph中ImageItem轴范围与自定义刻度问题

问题原因

你的代码里直接给AxisItem设置范围无效,是因为ImageItem默认使用像素索引作为坐标(10x10的数据对应x轴0-9、y轴0-9),PlotItem的视图范围会自动适配图像的默认坐标,导致自定义的轴范围被覆盖。

解决步骤

  1. 映射ImageItem到目标坐标范围:用setRect()指定图像在坐标系中的位置和尺寸,让像素对应到你需要的数值范围。
  2. 自定义轴刻度:通过AxisItem的setTicks()方法设置指定的刻度数组。

修改后的代码

import numpy as np
import pyqtgraph as pg
from PyQt5 import QtCore

app = pg.mkQApp('Example')

layout = pg.GraphicsLayoutWidget(show=True)
plot_item = pg.PlotItem(title="")
image_item = pg.ImageItem()

# 关键:将图像映射到x∈[-100,100]、y∈[-100,100]的范围
# QRectF参数:x起始值, y起始值, x方向总长度, y方向总长度
image_item.setRect(QtCore.QRectF(-100, -100, 200, 200))
plot_item.addItem(image_item)
layout.addItem(plot_item)

data = np.random.rand(10,10)
image_item.setImage(data)

# 自定义底部轴
axb = pg.AxisItem(orientation='bottom')
# 强制设置PlotItem的视图范围,确保轴显示正确
plot_item.setRange(xRange=[-100, 100], yRange=[-100, 100])

# 设置自定义刻度数组(两种任选其一)
# 方式1:固定间隔刻度
custom_ticks = [-100,-75,-50,-25,0,25,50,75,100]
# 方式2:线性生成刻度(注意:100个刻度会过于密集,建议调整数量)
# custom_ticks = np.linspace(-100, 100, 10).tolist()

# 给轴设置主刻度:每个刻度值对应显示的文本
axb.setTicks([[(tick, str(tick)) for tick in custom_ticks]])
plot_item.setAxisItems(axisItems={'bottom': axb})

if __name__ == '__main__':
   pg.exec()

关键说明

  • setRect():让ImageItem的像素与目标坐标系关联,10x10的图像会被拉伸填充到[-100,-100]到[100,100]的矩形区域。
  • setTicks():接受一个二维列表,第一个子列表是主刻度((刻度值, 显示文本)),第二个子列表可设置次刻度(可选)。
  • 如果使用np.linspace(-100,100,100)生成刻度,建议减少数量(比如改成10个),避免刻度文本重叠。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:35:04