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

时间:2013-10-02 14:37:54

标签: python colors matplotlib plot

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

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]

我正在制作数组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()

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

所以,第一点(1,4,9)应为红色,第二点(4,7,0)应为红色,第三点(5,8,7)应为绿色等等。

有可能这样做吗?如果您有任何想法请帮助:)

2 个答案:

答案 0 :(得分:16)

正如scatter的文档所述,您可以传递c参数:

  

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

     

c可以是单色格式字符串,也可以是一系列颜色规格   长度为N,或者要映射到的N个数字的序列   使用通过kwargs指定的cmap和norm的颜色(见下文)。注意   那个c不应该是单个数字RGB或RGBA序列,因为   这与要进行颜色映射的值数组无法区分。 C   可以是一个二维数组,其中行是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)

应该产生

coloured points

答案 1 :(得分:1)

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.scatter

c : color or sequence of color, optional, default

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

你试过这个吗?