是否可以更改 matplotlib vlines 中单行的颜色?

Is it possible to change the color of one individual line in matplotlib's vlines?

从 matplotlib 文档中我知道我可以在 vlines 的颜色参数中使用一组颜色,例如 colors=['green'、'yellow'、'red'] 等,但是颜色只是旋转,即:第一行是绿色,第二行是黄色,第三行是红色,第四行是绿色,第五行是黄色等等。

有没有办法单独访问一行并更改其颜色?

您可以单独绘制那条特定的线:

ax.vlines([1,2,4,5], 0, 1, colors='red')
ax.vlines(3, 0, 1, colors='blue')

或者您只需创建一个颜色列表,其中的颜色与线条的数量一样多。

通过get_colors()您可以获得当前颜色。如果颜色较少,则线条较少,颜色会重复。要更改特定线条的颜色,需要创建完整的颜色数组,然后才能更改特定颜色。

以下示例更改第 11 行:

import matplotlib.pyplot as plt
from matplotlib.colors import to_rgba
import numpy as np

lines = plt.vlines(np.arange(16), np.random.rand(16), np.random.rand(16) + 5,
                   colors=['lime', 'gold', 'crimson'], lw=5)

# lines = plt.gca().collections[0]
colors = lines.get_colors()
num_colors = len(colors)
num_lines = len(lines.get_paths())
new_colors = np.tile(colors, ((num_lines + num_colors - 1) // num_colors, 1))
new_colors[10] = to_rgba('darkblue')
lines.set_colors(new_colors)

plt.show()