散点图中的垂直线转换为数据点

15
假设我有一组点 x 和相应的数据 y。我现在用散点图绘制它们,plt.scatter(x,y)。得到的图中包含一些由 matplotlib 生成的 x 轴刻度。是否有办法保持自动刻度的情况下,从 x 轴向散点中的点添加垂直线并对其进行标记?

请解释一下你的问题。 - eyllanesc
如果您能添加所需输出的图像,那将非常好。 - eyllanesc
2个回答

28

嗯,有一个stem方法,使用起来更加简单:

import matplotlib.pyplot as plt
import numpy as np

x, y = np.random.random((2, 20))

fig, ax = plt.subplots()
ax.stem(x, y, markerfmt=' ')
plt.show()

如果您想要在行的顶部添加项目符号,请删除markerfmt


2
非常好。我不得不添加一个 basefmt 来防止水平轴变成红色。ax.stem(fs, amps, basefmt= 'C0', markerfmt=' ') - mins

19

这样做对吗?

经过修改的散点图

如果是的话,以下是必要的要点。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib import collections as matcoll

x = np.arange(1,13)
y = [15,14,15,18,21,25,27,26,24,20,18,16]

lines = []
for i in range(len(x)):
    pair=[(x[i],0), (x[i], y[i])]
    lines.append(pair)

linecoll = matcoll.LineCollection(lines)
fig, ax = plt.subplots()
ax.add_collection(linecoll)

plt.scatter(x,y)

plt.xticks(x)
plt.ylim(0,30)

plt.show()

补充:

对于彩色圆点,请将plt.scatter(x,y)替换为:

colours = ['Crimson', 'Blue', 'Fuchsia', 'Gold', 'Green', 'Tomato', 'Indigo', 'Turquoise', 'Brown', 'Wheat', 'Yellow',]
plt.scatter(x,y,c=colours)
  • 有关指定颜色的可选方式,请参见指定颜色
  • 有关X11颜色名称及其对应的十六进制代码的列表,请参见X11颜色
  • 请注意,matplotlib似乎不喜欢“Hot Pink”等两个词的颜色名称。

补充 2:

根据要求,最简单的方法可能是使用第二个答案提供的建议,并进行适当的调整。

import matplotlib.pyplot as plt
from datetime import datetime
from random import randint

x = [datetime(2019, 6, i) for i in range(1,21)]
y = [randint(10,20) for i in range(1,21)]

fig, ax = plt.subplots()
fig.subplots_adjust(bottom=0.2)
plt.xticks(rotation=90) 
ax.stem(x, y, markerfmt=' ')
plt.show()

请查看答案附录。 - Bill Bell
1
如果x轴是DateTime格式,那么如何格式化这段代码呢?因为matcoll只接受浮点数而不是日期时间对象。 - hakuna_code

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接