Python Matplotlib散点图根据列表上的值更改颜色

Python Matplotlib散点图根据列表上的值更改颜色,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我对matplotlib很陌生,我想知道如何根据列表中的值更改散点图上点的颜色 事实上,我有一个我想要绘制的二维数组和一个具有相同行数的列表,其中每个点包含我们想要使用的颜色 #Example data = np.array([4.29488806,-5.34487081], [3.63116248,-2.48616998], [-0.56023222,-5.89586997], [-0.51538502,-2.62569576], [-4.08561754,-4.2870525 ], [-0.

我对matplotlib很陌生,我想知道如何根据列表中的值更改散点图上点的颜色

事实上,我有一个我想要绘制的二维数组和一个具有相同行数的列表,其中每个点包含我们想要使用的颜色

#Example
data = np.array([4.29488806,-5.34487081],
[3.63116248,-2.48616998],
[-0.56023222,-5.89586997],
[-0.51538502,-2.62569576],
[-4.08561754,-4.2870525 ],
[-0.80869722,10.12529582])
colors = ['red','red','red','blue','red','blue']
ax1.plot(data[:,0],data[:,1],'o',picker=True)

如何设置颜色参数以适合我的颜色列表?

您必须使用所需颜色列表设置
plt的参数
c

import matplotlib.pylab as plt
import numpy as np

data = np.array([[4.29488806,-5.34487081],
[3.63116248,-2.48616998],
[-0.56023222,-5.89586997],
[-0.51538502,-2.62569576],
[-4.08561754,-4.2870525 ],
[-0.80869722,10.12529582]])

colors = ['red','red','red','blue','red','blue']
plt.scatter(data[:,0],data[:,1],marker='o',c = colors)
plt.show()

使用线图
plt.plot()
plt.plot()
只允许使用单一颜色。因此,您可以简单地循环数据和颜色,并分别绘制每个点

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
data = np.array([[4.29488806,-5.34487081],
                [3.63116248,-2.48616998],
                [-0.56023222,-5.89586997],
                [-0.51538502,-2.62569576],
                [-4.08561754,-4.2870525 ],
                [-0.80869722,10.12529582]])
colors = ['red','red','red','blue','red','blue']
for xy, color in zip(data, colors):
    ax.plot(xy[0],xy[1],'o',color=color, picker=True)

plt.show()
使用散点图
plt.scatter()
要生成散点图,请使用
散点
。这有一个参数
c
,可以通过多种方式设置散射点的颜色

(a)一个简单的方法是提供一个颜色列表

colors = ['red','red','red','blue','red','blue']
ax.scatter(data[:,0],data[:,1],c=colors,marker="o", picker=True)
(b)另一个选项是提供数据列表,并使用colormap将数据映射到颜色

colors = [0,0,0,1,0,1] #red is 0, blue is 1
ax.scatter(data[:,0],data[:,1],c=colors,marker="o", cmap="bwr_r")

使用plot进行此操作通常不是一个好主意。它为每个点创建一个艺术家,而散射是专门为此设计的。我没有评估这两个选项。虽然我当然更喜欢第二个,但可能有理由使用
plot
。除非你画了很多点,否则不管怎样都没关系。所以“坏”肯定就是强。好吧,我同意,“坏”可能有点太强了。但我看不出有任何理由在这里使用plot。考虑到这个问题已经是关于分散的,我不认为这个选项会增加什么(除了混乱)。(b)这个答案是错误的。将颜色设置为仅包含
1
,然后查看点是红色的,而不是红色的blue@Christoph90如果只有一个值,则需要手动设置归一化(即matplotlib如何知道某个值位于颜色贴图的哪一端?)