是否可以更改 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()
从 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()