我有以下数据(四个等长阵列):
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)应为绿色等等。
有可能这样做吗?如果您有任何想法请帮助:)
答案 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)
应该产生
答案 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。“
你试过这个吗?