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

Python3.x下使用Matplotlib为每个散点绘制水平与垂直线的问题

为Matplotlib散点添加水平和垂直线的解决方案

你可以通过Matplotlib的plt.vlines()和plt.hlines()函数轻松实现这个需求,这两个函数支持批量处理坐标数组,效率很高。下面分几种常见场景给你演示:

场景1:绘制从坐标轴到散点的十字线

这是最常用的需求,线条从x轴/y轴延伸到对应散点的位置,能清晰标注每个点的坐标位置:

import matplotlib.pyplot as plt
x = [-0.9, 0.5 , -2.5, 3 , -1.5 ]
y = [2.9 , -1.5 , 1 , 1 , -2.4 ]
v = [50 , 33 , 21 , 18 , 5 ]

fig = plt.figure(figsize=(10, 8))
plt.scatter(x,y, s=40 ,marker='o', c='black')

# 绘制垂直线:从y轴底部延伸到散点的y坐标
plt.vlines(x=x, ymin=plt.ylim()[0], ymax=y, colors='gray', linestyles='--', linewidth=0.8)
# 绘制水平线:从x轴左侧延伸到散点的x坐标
plt.hlines(y=y, xmin=plt.xlim()[0], xmax=x, colors='gray', linestyles='--', linewidth=0.8)

plt.grid()
plt.show()

这里plt.ylim()[0]会自动获取当前y轴的最小值,plt.xlim()[0]获取x轴最小值,确保线条精准对齐到坐标轴。你可以调整colors(颜色)、linestyles(线型)和linewidth(线宽)来匹配你的可视化风格。

场景2:绘制贯穿整个绘图区域的垂直线/水平线

如果你想要线条穿过整个绘图区域(比如从顶部到底部的垂直线、从左到右的水平线),只需要把终点设为轴的另一端极值即可:

import matplotlib.pyplot as plt
x = [-0.9, 0.5 , -2.5, 3 , -1.5 ]
y = [2.9 , -1.5 , 1 , 1 , -2.4 ]
v = [50 , 33 , 21 , 18 , 5 ]

fig = plt.figure(figsize=(10, 8))
plt.scatter(x,y, s=40 ,marker='o', c='black')

# 贯穿整个区域的垂直线
plt.vlines(x=x, ymin=plt.ylim()[0], ymax=plt.ylim()[1], colors='red', linestyles=':', linewidth=1)
# 贯穿整个区域的水平线
plt.hlines(y=y, xmin=plt.xlim()[0], xmax=plt.xlim()[1], colors='red', linestyles=':', linewidth=1)

plt.grid()
plt.show()

场景3:根据额外数据自定义线条样式

如果你的v值需要用来区分线条(比如颜色、宽度),可以用循环逐个绘制,灵活控制每个线条的属性:

import matplotlib.pyplot as plt
x = [-0.9, 0.5 , -2.5, 3 , -1.5 ]
y = [2.9 , -1.5 , 1 , 1 , -2.4 ]
v = [50 , 33 , 21 , 18 , 5 ]

fig = plt.figure(figsize=(10, 8))
plt.scatter(x,y, s=40 ,marker='o', c='black')

# 用v值映射渐变颜色
norm = plt.Normalize(min(v), max(v))
cmap = plt.cm.viridis  # 可替换为你喜欢的配色方案

for xi, yi, vi in zip(x, y, v):
    line_color = cmap(norm(vi))
    # 绘制垂直线
    plt.vlines(xi, ymin=plt.ylim()[0], ymax=yi, color=line_color, linewidth=1.5)
    # 绘制水平线
    plt.hlines(yi, xmin=plt.xlim()[0], xmax=xi, color=line_color, linewidth=1.5)

plt.grid()
plt.show()

这样线条颜色会随着v值的大小渐变,让你的可视化更有信息量。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:01:28