我可以在matplotlib中画一条多色线吗?

2022-02-21 00:00:00 python matplotlib

问题描述

我正在尝试创建一条满足特定条件的彩色线条。基本上,我希望这条线在y轴向下指向时显示为红色,在向上指向时显示为绿色,在两者都不显示时显示为蓝色。

我发现了一些类似的示例,但我始终无法将它们转换为在轴上使用lot()。我只是想知道怎么才能做到这一点。

以下是我到目前为止编写的一些代码:

#create x,y coordinates
x = numpy.random.choice(10,10)
y = numpy.random.choice(10,10)

#create an array of colors based on direction of line (0=r, 1=g, 2=b)
colors = []
#create an array that is one position away from original 
#to determine direction of line 
yCopy = list(y[1:])
for y1,y2 in zip(y,yCopy):
    if y1 > y2:
        colors.append(0)
    elif y1 < y2:
        colors.append(1)
    else:
        colors.append(2)
#add tenth spot to array as loop only does nine
colors.append(2)

#create a numpy array of colors
categories = numpy.array(colors)

#create a color map with the three colors
colormap = numpy.array([matplotlib.colors.colorConverter.to_rgb('r'),matplotlib.colors.colorConverter.to_rgb('g'),matplotlib.colors.colorConverter.to_rgb('b')])

#plot line
matplotlib.axes.plot(x,y,color=colormap[categories])

不确定如何让lot()接受颜色数组。我总是收到关于用作颜色的格式类型的错误。尝试了十六进制、十进制、字符串和浮点数。与Scatter()配合使用非常理想。

matlab

我不认为您可以在plot中使用颜色数组(文档说颜色可以是任何推荐答案颜色,而scatter文档说您可以使用数组)。

但是,您可以通过单独绘制每行来伪造它:

import numpy
from matplotlib import pyplot as plt

x = range(10)
y = numpy.random.choice(10,10)
for x1, x2, y1,y2 in zip(x, x[1:], y, y[1:]):
    if y1 > y2:
        plt.plot([x1, x2], [y1, y2], 'r')
    elif y1 < y2:
        plt.plot([x1, x2], [y1, y2], 'g')
    else:
        plt.plot([x1, x2], [y1, y2], 'b')

plt.show()

相关文章