为何ax.set_xlim([0, dur])会向终端输出坐标轴范围?
解决matplotlib中ax.set_xlim()意外输出x轴范围的问题
问题描述
我在绘制包含12个子图的大型图表时,终端出现了意料之外的输出(0.0, 130.0)。逐一排查后确认该输出来自某子图的ax.set_xlim([0, dur])命令,但其他子图使用相同方法设置x轴范围时并未出现此情况。
简化后的绘图代码:
fig = plt.figure(3) plt.rcParams["font.family"] = "serif" fig.set_size_inches(10, 12) fig.tight_layout() # r ax12 = plt.subplot(6,2,8) ax12.grid(linestyle='--',linewidth=1.25) ax12.set(ylabel = r'$r$ ($^\circ$/s)') ax12.plot(t_steps[0:i], X[0:i,8]*57.3, 'b') ax12.set_xlim([0, dur])
终端输出:
(0.0, 130.0)
原因分析
matplotlib的set_xlim()方法本身会返回设置完成后的x轴范围元组。如果你的代码执行环境(比如交互式Python shell、Jupyter Notebook等)会自动打印顶层表达式的返回值,当ax.set_xlim([0, dur])作为顶层语句执行时,这个返回值就会被输出到终端。其他子图未出现此问题,大概率是那些子图的set_xlim()语句处于不会触发自动打印的上下文(比如被包含在函数、循环内部,或者已经被赋值给变量)。
解决方法
要抑制这个输出,只需要将set_xlim()的返回值接收即可,哪怕用下划线_来忽略这个值:
# 用下划线接收返回值,避免自动打印 _ = ax12.set_xlim([0, dur])
或者也可以将该语句放在不会触发自动打印的代码块中(比如函数内部),不过最简单的方式就是给返回值赋值。
内容的提问来源于stack exchange,提问作者megalomaniac
相关产品推荐
相关产品推荐

