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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:00:59