pyqtgraph调用showGrid后坐标轴刻度标签被截断如何解决
问题原因
你在调用setXRange、setYRange时设置了padding=0,让绘图区域完全贴合你设定的坐标区间边界,开启网格后,坐标轴的渲染逻辑没有为边缘的刻度标签预留显示空间,因此位于最左侧、最下侧的边界刻度标签会被截断。
解决方法
你可以根据需求选择以下任意一种方案:
方案一:调整坐标范围的padding值
如果你对坐标范围的精度要求不高,可以将padding参数设置为0.01~0.05的小数值(为坐标范围的百分比),既不会明显改变你要显示的区间范围,又能预留出刻度标签的显示空间:p1.setXRange(0, 2*np.pi, padding=0.02) p1.setYRange(-1, 1, padding=0.02)方案二:严格保留坐标范围,手动设置视图边距
如果你必须严格使用padding=0保证坐标范围完全匹配设定值,可以手动给视图的左侧、下侧预留像素边距放置标签,绘图区域内部的坐标范围不会受影响:p1.setXRange(0, 2*np.pi, padding=0) p1.setYRange(-1, 1, padding=0) # 给左侧和下侧各预留10像素空间放标签,可根据实际显示效果调整数值 p1.getViewBox().setContentsMargins(left=10, bottom=10, right=0, top=0)
完整可运行示例
import numpy as np import pyqtgraph as pg x = np.linspace(0, 2*np.pi, 1000) y = np.sin(x) app = pg.mkQApp() win = pg.GraphicsLayoutWidget(show = True) p1 = win.addPlot(row = 0, col = 0) p1.plot(x = x, y = y, pen = pg.mkPen(color = 'b', width = 1)) # 开启网格 p1.showGrid(x = True, y = True) # 设置坐标范围 p1.setXRange(0, 2*np.pi, padding=0) p1.setYRange(-1, 1, padding=0) # 预留标签显示空间 p1.getViewBox().setContentsMargins(left=10, bottom=10, right=0, top=0) app.exec_()
内容的提问来源于stack exchange,提问作者Zephyr
相关产品推荐
相关产品推荐

