是否可以在matplotlib中绘制所有点都链接到x轴的绘图?

是否可以在matplotlib中绘制所有点都链接到x轴的绘图?,matplotlib,Matplotlib,我试图在matplotlib中找到一种绘制线图的方法,但我不想在点之间绘制线。相反,我想在每个点和x轴之间画一条垂直线 当我进行标准绘图时,我获得以下信息: import numpy as np import matplotlib.pyplot as plt data = np.array([0,1,3,2,3,1,4]) plt.plot(data) plt.xlim([-0.2,6.2]) plt.ylim([-0.2,5]) 相反,我希望获得以下信息: import numpy as

我试图在matplotlib中找到一种绘制线图的方法,但我不想在点之间绘制线。相反,我想在每个点和x轴之间画一条垂直线

当我进行标准绘图时,我获得以下信息:

import numpy as np
import matplotlib.pyplot as plt
data = np.array([0,1,3,2,3,1,4])
plt.plot(data)
plt.xlim([-0.2,6.2])
plt.ylim([-0.2,5])

相反,我希望获得以下信息:

import numpy as np
import matplotlib.pyplot as plt
data = np.array([0,1,3,2,3,1,4])
plt.plot(data)
plt.xlim([-0.2,6.2])
plt.ylim([-0.2,5])

有什么办法吗?
谢谢

除了stem和条形图之外,还有两个其他选项,使用
vlines()
LineCollection()


选项1——使用
vlines()

for x, y in enumerate(data):
    plt.vlines(x=x, ymin=0, ymax=y, color='r')
from matplotlib.collections import LineCollection

lines = [[(x, 0), (x, y)] for x, y in enumerate(data)]
linesCol = LineCollection(lines, linewidths=3, color='r')

fig, ax = plt.subplots()
ax.add_collection(linesCol)
plt.scatter(range(len(data)), data, s=0)
或者在一行中不使用循环

plt.vlines(x=range(data.size), ymin=0, ymax=data, color='r')

选项2——使用
LineCollection()

for x, y in enumerate(data):
    plt.vlines(x=x, ymin=0, ymax=y, color='r')
from matplotlib.collections import LineCollection

lines = [[(x, 0), (x, y)] for x, y in enumerate(data)]
linesCol = LineCollection(lines, linewidths=3, color='r')

fig, ax = plt.subplots()
ax.add_collection(linesCol)
plt.scatter(range(len(data)), data, s=0)

plt.bar(范围(数据大小),数据,宽度=0.1,颜色为深红色)
干图是另一个选项:
plt.stem(数据,linefmt='r-',markerfmt='o')
。(要更改线宽:请参阅)谢谢,干图正是我要找的。谢谢您宝贵的输入。虽然stem plot非常适合我的情况,但LineCollection解决方案似乎高度可定制。为什么要在一个命令中为
plt.vlines
创建一个循环,而不是在一个命令中
plt.vlines(x=range(data.size),ymin=0,ymax=data,color='r')
。我将根据答案修改你的建议。