Matplotlib设置plt.xlim后默认会绘制轴外曲线吗?如何截断轴外部分?
使用matplotlib设置xlim后,默认是否绘制轴外曲线?
matplotlib默认不会自动截断轴外的曲线——plt.xlim()仅调整坐标轴的显示范围,不会修改原始数据或截断绘制的线条,超出轴范围的曲线部分依然会被绘制出来,只是坐标轴只展示指定区间。
我使用matplotlib 3.5.3版本(开发环境为Spyder IDE),代码如下:
import matplotlib.pyplot as plt import numpy as np plt.figure() x = np.linspace(-10, 10, 11) y = x**2 plt.plot(x, y) plt.xlim((-5, 5))
当前效果:曲线完整显示了x从-10到10的所有点,轴外的曲线部分依然可见;
期望效果:仅显示x在-5到5之间的曲线部分,轴外部分被截断。
解决方案
要实现仅显示轴内曲线的效果,推荐两种方法:
- 预筛选数据(效果最可控)
绘制前直接过滤出x在目标范围内的数据点,只绘制符合条件的部分:
import matplotlib.pyplot as plt import numpy as np plt.figure() x = np.linspace(-10, 10, 11) y = x**2 # 筛选x在-5到5之间的数据 valid_mask = (x >= -5) & (x <= 5) plt.plot(x[valid_mask], y[valid_mask]) plt.xlim((-5, 5)) plt.show()
- 启用裁剪(无需修改原始数据)
通过plot的clip_on=True参数确保曲线被裁剪到坐标轴范围内,同时使用面向对象的方式设置坐标轴范围:
import matplotlib.pyplot as plt import numpy as np fig, ax = plt.subplots() x = np.linspace(-10, 10, 11) y = x**2 ax.plot(x, y, clip_on=True) ax.set_xlim(-5, 5) plt.show()
注:这种方法对于离散点连线,若相邻点一个在轴内一个在轴外,连线仍会穿过轴边缘,因此预筛选数据的方式更贴合你的期望效果。
内容的提问来源于stack exchange,提问作者inception
相关产品推荐
相关产品推荐

