有没有办法从Matplotlib,Python中表达颜色的变化?

nr7wwzry  于 2022-12-23  发布在  Python
关注(0)|答案(3)|浏览(104)

在你阅读之前,我为我的蹩脚英语道歉。我有一个移动质量的数据数组,并希望按时间区域显示它们。如:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0, 1, 2, 3])
y = np.array([3, 4, 5, 6])

plt.plot(x,y)

在这段代码中,我只想看到它们每一行都有不同的颜色。例如,点(0,3)是白点,点(3,5)是黑点,而(1,4),(2,5)是灰点,但亮度不同。
我刚开始使用python,所以我搜索了pyplot lib,但是没有找到例子。
我尝试了Seaborn库和Pyplot 3d示例,但没有找到表达想要做什么的解决方案。

b91juud3

b91juud31#

如果您的目标是确定点的顺序,则可以使用色图,指定确定着色的向量只是点的索引序列。

import numpy as np
import matplotlib.pyplot as plt

np.random.seed(20201222)
x = np.random.randint(5, 20, 20)
y = np.random.randint(5, 20, 20)

r = range(len(x))
plt.scatter(x, y, s=80, c=r, cmap='plasma')
plt.grid()
cb = plt.colorbar()
cb.set_ticks(r)
cb.set_ticklabels(("%d"%(order+1) for order in r))
but5z9lq

but5z9lq2#

color参数传递给scatter函数,该函数显示给定的点和任何定义的要素。

#array declaration
#...

for x1, y1 in zip(x, y):
    if x1 == 0:
        color = "white"
    elif x1 == 1 or x1 == 2:
        color = "gray"
    elif x1 == 3:
        color = "black"
        
    plt.scatter(x1, y1, c=color)

# plot linear line from arrays

我们使用zip类一次迭代两个数组,这样就可以绘制给定数组中的每个点;使用x数组中的x坐标来确定用什么颜色标记点; scatter函数将点放在图形上,并提供更改给定点特征的选项。

最终的代码看起来像这样:

import matplotlib.pyplot as plt
import numpy as np

x = np.array([0, 1, 2, 3])
y = np.array([3, 4, 5, 6])

for x1, y1 in zip(x, y):
    if x1 == 0:
        color = "white"
    elif x1 == 1 or x1 == 2:
        color = "gray"
    elif x1 == 3:
        color = "black"
        
    plt.scatter(x1, y1, c=color)

plt.plot(x, y)
plt.show()

有关matplotlib的scatter函数的文档可在here中找到

iih3973s

iih3973s3#

poiboi was on the right track.下面是一个自动为点的颜色设置线性渐变的示例。

import matplotlib.pyplot as plt
import numpy as np
x = [0, 1, 2, 3]
y = [3, 4, 5, 6]
plt.scatter(x, y, c=x[:: -1], cmap='gray', vmin=min(x), vmax=max(x))
plt.show()

c关键字参数告诉Matplotlib使用灰色色彩Map表的哪个点使用哪个颜色。默认情况下,该色彩Map表从黑色变为白色,因此我们反向传递xvminvmax是要分配颜色的最小值和最大值。注意第一个点是白色(因此不可见)。

相关问题