Python matplotlib散点图:根据给定条件更改数据点的颜色

Pan*_*chi 11 python plot colors matplotlib

我有以下数据(四个等长阵列):

a = [1, 4, 5, 2, 8, 9, 4, 6, 1, 0, 6]
b = [4, 7, 8, 3, 0, 9, 6, 2, 3, 6, 7]
c = [9, 0, 7, 6, 5, 6, 3, 4, 1, 2, 2]
d = [La, Lb, Av, Ac, Av, By, Lh, By, Lg, Ac, Bt]
Run Code Online (Sandbox Code Playgroud)

我正在制作数组a,b,c的3d图:

import pylab
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(a,b,c)

plt.show()
Run Code Online (Sandbox Code Playgroud)

现在,我想使用名为'd'的数组为这些散乱的点着色,这样; 如果d中对应的'i'元素值的第一个字母是'L',则将该点着色为红色,如果它以'A'开始,则将其着色为绿色,如果以'B'开头,则将其着色为蓝色.

因此,第一点(1,4,9)应为红色,第二点(4,7,0)应为红色,第三点(5,8,7)应为绿色,依此类推.

有可能这样做吗?如果你有一些想法请帮助:)

DSM*_*DSM 16

正如散点文档所解释的那样,您可以传递c参数:

c:颜色或颜色序列,可选,默认

c可以是单色格式字符串,或长度为N的颜色规范序列,或使用通过kwargs指定的cmap和norm映射到颜色的N个数字序列(见下文).请注意,c不应该是单个数字RGB或RGBA序列,因为它与要进行颜色映射的值数组无法区分.然而,c可以是2-D阵列,其中行是RGB或RGBA.

所以像

use_colours = {"L": "red", "A": "green", "B": "blue"}
ax.scatter(a,b,c,c=[use_colours[x[0]] for x in d],s=50)
Run Code Online (Sandbox Code Playgroud)

应该产生

有色点