11

I have the following data (four equal-length arrays) :

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]

I am making a 3d plot of arrays a, b, c :

import pylab
import matplotlib.pyplot as plt

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

plt.show()

Now, I want to color these scattered points using the array named 'd' such that; if the first letter of corresponding 'i'th element value in d is 'L', then colour the point red, if it starts with 'A' colour it green and if it starts with 'B', colour it blue.

So, first point (1,4,9) should be red, second(4,7,0) red too, third(5,8,7) should be green and so on..

Is it possible to do so? Please help if you have some idea :)

4

2 回答 2

16

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

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

c 可以是单个颜色格式字符串,也可以是长度为 N 的颜色规范序列,或者是要使用 cmap 和通过 kwargs 指定的规范映射到颜色的 N 数字序列(见下文)。请注意,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)

应该产生

彩色点

于 2013-10-02T14:50:19.927 回答
1

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

c : color or sequence of color, optional, default

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

你试过这个吗?

于 2013-10-02T14:50:41.903 回答