如何为Partial Dependence Plot设置Y轴最大值?X轴生效Y轴无效
部分依赖图(PDP)Y轴范围设置无效的原因及解决办法
问题描述
我想给Partial Dependence Plot(部分依赖图)设置坐标轴最大值,X轴范围设置生效了,但Y轴范围设置无效,这是为什么?
我的代码如下:
shap.partial_dependence_plot( "fc", model.predict, X100, ice=False, show=False, model_expected_value=True, feature_expected_value=True, ylabel="R") import matplotlib.pyplot as plt from matplotlib.pyplot import figure #ax = plt.gca() #ax.set_ylim([0, 600]) plt.rcParams["figure.dpi"] = 90 plt.xlim(0, 600) plt.ylim(0, 600) plt.show()
原因分析
核心问题在于shap.partial_dependence_plot的绘图逻辑:它在绘制过程中会重新创建或强制调整坐标轴对象,尤其是Y轴会根据PDP计算出的数据范围自动适配,直接覆盖你后续通过plt.ylim()设置的参数。而X轴能生效,是因为你的设置范围和PDP默认的X轴数据范围有重叠,没有被完全覆盖。
另外你之前的代码中,调用PDP绘图后还做了导入、修改dpi等操作,这中间可能无意中切换了Matplotlib的坐标轴上下文,导致你最后调用plt.ylim()时,修改的根本不是PDP图对应的坐标轴。
解决办法
有两种可靠的方式来设置Y轴范围:
方法1:直接接收PDP返回的坐标轴对象
shap.partial_dependence_plot会返回绘图所用的坐标轴对象,直接用这个对象设置Y轴范围即可:
# 接收返回的坐标轴对象 ax = shap.partial_dependence_plot( "fc", model.predict, X100, ice=False, show=False, model_expected_value=True, feature_expected_value=True, ylabel="R" ) import matplotlib.pyplot as plt plt.rcParams["figure.dpi"] = 90 plt.xlim(0, 600) # 用返回的ax设置Y轴范围,确保修改的是PDP图的坐标轴 ax.set_ylim([0, 600]) plt.show()
方法2:绘图后立即获取当前坐标轴并修改
如果不想接收返回值,就在调用PDP绘图后立刻获取当前坐标轴,直接修改其范围:
shap.partial_dependence_plot( "fc", model.predict, X100, ice=False, show=False, model_expected_value=True, feature_expected_value=True, ylabel="R" ) import matplotlib.pyplot as plt plt.rcParams["figure.dpi"] = 90 # 绘图后立刻获取当前坐标轴,避免上下文切换 ax = plt.gca() ax.set_xlim(0, 600) ax.set_ylim(0, 600) plt.show()
内容的提问来源于stack exchange,提问作者user20155022
相关产品推荐
相关产品推荐

