是否可以在matplotlib中绘制所有点都链接到x轴的绘图?
我试图在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
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')
。我将根据答案修改你的建议。