Python Matplotlib手动设置坐标轴范围后数据点消失问题求助
Matplotlib手动设置坐标轴范围后数据点消失问题排查思路
使用Matplotlib绘图时遇到异常:图表可正常渲染,但手动调用set_xlim()和set_ylim()设置坐标轴范围后,所有数据点和线条全部消失。已确认待绘制数据完全处于设置的坐标轴范围内,无法定位问题根源,求解决思路。
相关代码
def generateGraph(bore, type, xMin, xMax, yMin, yMax, legend): #type: 1=Normalised, 2=Actual or 3=Drawdown fig, ax = plt.subplots() #declare instance of plot markerSize = 1 #Plot observed data if type == 1 or type == 2: observedPt = ax.scatter(bore.listObsTime, bore.listObsHead, s=markerSize) observedLine = ax.plot(bore.listObsTime, bore.listObsHead) else: observedPt = ax.scatter(bore.listObsTime, bore.listObsDrawDown) observedLine = ax.plot(bore.listObsTime, bore.listObsDrawDown) for i in range(bore.numFilesLoaded): if type == 1: modelledPt = ax.scatter(bore.listModelledTimeArrays[i], bore.listModelledHeadNormalisedArrays[i], s=markerSize) modelledLine = ax.plot(bore.listModelledTimeArrays[i], bore.listModelledHeadNormalisedArrays[i]) elif type ==2: modelledPt = ax.scatter(bore.listModelledTimeArrays[i], bore.listModelledHeadArrays[i], s=markerSize) modelledLine = ax.plot(bore.listModelledTimeArrays[i], bore.listModelledHeadArrays[i]) else: modelledPt = ax.scatter(bore.listModelledTimeArrays[i], bore.listModelledDrawDownArrays[i], s=markerSize) modelledLine = ax.plot(bore.listModelledTimeArrays[i], bore.listModelledDrawDownArrays[i]) ax.set_xlim(xMin, xMax) ax.set_ylim(yMin, yMax) plt.show()
图表效果对比
- 未设置坐标轴范围时:图表正常显示所有观测数据点、模拟数据点及对应线条,数据分布清晰。
- 设置合理坐标轴范围后:坐标轴范围按预期更改,但所有数据点和线条均消失,仅显示空白的坐标轴区域。
可能的解决思路
- 检查坐标轴范围参数类型:确认
xMin、xMax、yMin、yMax为int/float等数值类型,若传入非数值类型会导致渲染异常。 - 验证坐标轴范围顺序:确保
xMin < xMax且yMin < yMax,顺序颠倒可能引发数据显示异常。 - 排查数据数值类型:检查
bore对象中的时间、水位等数据是否为Matplotlib可识别的数值/时间类型,非标准类型可能在设置范围后无法正确映射。 - 调整坐标轴范围设置时机:将
ax.set_xlim()和ax.set_ylim()移至代码最后(plt.show()前),或尝试用ax.axis([xMin, xMax, yMin, yMax])替代单独设置x、y轴范围。 - 再次核对数据与范围边界:确认数据极值完全落在设置的坐标轴范围内,若数据略超出边界可能被完全排除在可视区域外。
- 尝试自动缩放后再设置手动范围:调用
ax.autoscale()后再设置手动坐标轴范围,排查是否存在渲染状态冲突。
内容的提问来源于stack exchange,提问作者PMG
相关产品推荐
相关产品推荐

