Python散点图中以颜色编码的第3列和第4列

Python散点图中以颜色编码的第3列和第4列,python,matplotlib,Python,Matplotlib,我试着做一个简单的散点图,基于两列的颜色编码点。我所拥有的是: import numpy as np import matplotlib.pyplot as plt filename = ("master.kkids.obslist") data = np.loadtxt(filename,skiprows=14,dtype=str) x = data[:,7] y = data[:,8] u = data[:,18] v = data[:,19] z = data[:,20] x1 =

我试着做一个简单的散点图,基于两列的颜色编码点。我所拥有的是:

import numpy as np
import matplotlib.pyplot as plt

filename = ("master.kkids.obslist")

data = np.loadtxt(filename,skiprows=14,dtype=str)

x = data[:,7]
y = data[:,8]
u = data[:,18]
v = data[:,19]
z = data[:,20]

x1 = x.astype(float)
y1 = y.astype(float)

plt.scatter(x,y)
plt.savefig('hi.png')
现在,我是Python新手,我的谷歌搜索没有回答这个问题:


如何使点的颜色响应U、V和Z列?比如说,U列中有“Y”或“N”。如何使“N”点变为灰色,“Y”点变为红色?提前谢谢

您可以将包含颜色数组的参数传递给
scatter
函数,如下所示:

colors = ["grey" if s == "N" else "red" for s in u]
plt.scatter(x1, y2, c=colors)
此代码使用字符串“灰色”和“红色”填充列表
颜色
,具体取决于
u
中的哪些元素是“Y”和哪些元素是“N”,然后将其传递给
分散
函数

如果在选择正确的颜色时需要更复杂的逻辑,我建议将其移动到单独的函数。让我们将其命名为
c()
,并将U、V和Z元素作为参数传递给它

def c(u1, v1, z1):
    if u1 == "N": return "grey"
    ... # other logic...

colors = [c(u1, v1, z1) for (u1, v1, z1) in zip(u, v, z)]

非常有帮助!非常感谢。第二个问题:是否可以让不同的柱改变点的形状,而不是颜色?或者除了颜色之外?@uhurulol我不这么认为。但是您可以多次调用
scatter
,传递不同的
marker
参数,每次只包含要使用特定标记形状绘制的点。