【问题标题】:Vertical lines to points in scatter plot垂直线到散点图中的点
【发布时间】:2023-04-10 18:30:02
【问题描述】:

假设我有一组点x和一组对应的数据y。我现在将它们绘制在散点图中,plt.scatter(x,y)。我得到的图包含一些由 matplotlib 生成的 x 轴刻度。有没有办法实现自动滴答,但要从 x 轴添加垂直线到散点图中的点并标记它们?

【问题讨论】:

  • 请解释你的问题
  • 如果你能添加一个想要输出的图就太好了

标签: python matplotlib


【解决方案1】:

像这样?

如果是这样,那么这里是必需品。

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)
  • 有关指定颜色的可选方法,请参阅specifying colours
  • 有关 X11 颜色名称及其对应十六进制代码的列表,请参阅 X11 colours
  • 请注意,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()

【讨论】:

  • 请看答案附录。
  • 如果 x 轴是 DateTime 格式,那么如何格式化这段代码?因为 matcoll 只采用 float 而不是 datetime 对象。
【解决方案2】:

嗯,有一个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

【讨论】:

  • 优秀。我必须添加一个basefmt 以防止水平轴变为红色。 ax.stem(fs, amps, basefmt= 'C0', markerfmt=' ')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 1970-01-01
相关资源
最近更新 更多