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

如何用Python绘制仅含水平线与垂直线的阶梯式图表?

嘿,这个需求我刚好碰到过!你要的是那种相邻数据点先水平延伸到下一点的横坐标,再垂直调整到对应纵坐标的折线图对吧?Matplotlib里其实有两种简单的实现方式,我给你详细讲讲:

方法1:手动构造数据点(最直观)

核心思路就是把每一段的路径拆成两个点:先从当前点水平移动到下一点的x位置(保持y不变),再垂直移动到下一点的y位置。我们只需要把这些拆分后的点按顺序整理好,再用普通的plot函数连接就行。

举个代码例子:

import matplotlib.pyplot as plt

# 你的原始数据
x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 6, 4]

# 构造用于绘制的新坐标数组
x_new = []
y_new = []

# 遍历每一对相邻点,拆分路径
for i in range(len(x) - 1):
    # 添加当前点
    x_new.append(x[i])
    y_new.append(y[i])
    # 添加水平移动后的点(x到下一个,y不变)
    x_new.append(x[i+1])
    y_new.append(y[i])

# 别忘了添加最后一个点,完成最后一段垂直移动
x_new.append(x[-1])
y_new.append(y[-1])

# 绘图
plt.figure(figsize=(8, 5))
plt.plot(x_new, y_new, marker='o', color='#1f77b4')
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('先水平后垂直的折线图')
plt.grid(alpha=0.3)
plt.show()

这段代码会把原始的每个线段拆成“水平+垂直”两段,marker='o'可以帮你标出原始数据点,方便你对照路径是否正确。

方法2:用Matplotlib自带的step函数(更简洁)

其实Matplotlib专门有个step函数用来画阶梯图,只需要设置where='post'参数,就能直接实现你要的“先水平后垂直”效果。默认的where='pre'是先垂直后水平,刚好是反过来的。

代码示例:

import matplotlib.pyplot as plt

# 原始数据
x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 6, 4]

# 绘制阶梯图
plt.figure(figsize=(8, 5))
plt.step(x, y, where='post', marker='o', color='#ff7f0e', linewidth=2)
plt.xlabel('X 轴')
plt.ylabel('Y 轴')
plt.title('用step函数实现先水平后垂直的折线图')
plt.grid(alpha=0.3)
plt.show()

这个方法不需要手动构造数据,代码更简洁,适合常规的阶梯图需求。如果需要对路径做更自定义的调整(比如中间插入额外的点),那方法1会更灵活。

两种方法都能完美满足你的需求,选哪个就看你的具体场景啦~

内容的提问来源于stack exchange,提问作者Chanber Liou

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:46:34