Matplotlib如何绘制直接跳转至数据点的无斜率折线图
问题
我有一组待可视化的数据,需要基于Matplotlib绘制折线图,想要实现折线直接跳转至对应数据点的效果,而非默认绘制的带正/负斜率的连接线段。
上图中蓝色折线是传入数据集后自动生成的默认绘制效果,红色折线是期望实现的目标效果。目前我通过for循环搭配仅传入两个坐标的plt.plot方法手动绘制出了目标效果,想确认是否存在无需手动逐段绘制的更快捷方案,Matplotlib是否提供了对应内置函数可直接实现该需求。
解决方法
Matplotlib内置了plt.step()函数专门实现这类阶梯跳转折线效果,无需手动循环逐段绘制,调用方式和plt.plot()基本一致,通过where参数即可控制跳转逻辑匹配目标效果:
- 最简实现代码:
import matplotlib.pyplot as plt import numpy as np # 测试数据 x = np.linspace(0, 9, 10) y = np.random.randint(2, 12, size=10) # where='post'即可复现示例中的红色折线效果:水平延伸到数据点x坐标位置后,再垂直跳转到对应y值 plt.step(x, y, where='post', color='red', label='目标跳转折线') # 对比默认折线效果 plt.plot(x, y, color='blue', linestyle='--', label='默认斜连线折线') plt.legend() plt.show()
where参数说明:where='pre':默认值,在区间起始x位置就跳转到对应y值,再水平绘制到区间终点where='post':区间内保持当前y值水平绘制,到区间终点(即数据点所在x位置)再垂直跳转到下一个y值,和示例中的红色折线效果完全匹配
- 该函数支持所有
plt.plot()的通用参数,包括线宽、颜色、标记点、图例标签等,使用习惯和普通折线绘制完全一致。
内容的提问来源于stack exchange,提问作者Antichess
相关产品推荐
相关产品推荐

