我有一个数组
devID = [A, B, C, ..., AP, BP, CP, ...]
device = [A, B, C, ..., A, B, C, ...]
彼此相关。
我想创建另一个数组color
,对于device
具有相同值的那些地方,它们具有相同的值,即:
color = [ 'r', 'g', 'b', ..., 'r', 'g', 'b', ...]
由于我想自动绘制与devID
相关的不同曲线,该曲线的长度约为100,所以我希望从例如颜色表中分配颜色。
到目前为止,我已经尝试了numpy.unique
和numpy.where
的不同组合,但没有成功...
答案 0 :(得分:2)
如前所述,您可以使用np.unique
并使用返回的索引对颜色列表进行索引。
import numpy as np
import matplotlib.pyplot as plt
device = ['A', 'B', 'C', 'A', 'B', 'C']
u, inv = np.unique(device, return_inverse=True)
colors = plt.cm.viridis(np.linspace(0,1,len(u)))[inv]
print(colors)
打印
[[0.267004 0.004874 0.329415 1. ]
[0.127568 0.566949 0.550556 1. ]
[0.993248 0.906157 0.143936 1. ]
[0.267004 0.004874 0.329415 1. ]
[0.127568 0.566949 0.550556 1. ]
[0.993248 0.906157 0.143936 1. ]]
答案 1 :(得分:1)
为颜色创建字典并将其映射到设备列表。
In [25]: device = ['A', 'B', 'C', 'A', 'B', 'C']
In [26]: device
Out[26]: ['A', 'B', 'C', 'A', 'B', 'C']
In [27]: colors = dict(zip(np.unique(device), 'rgb'))
In [28]: colors
Out[28]: {'A': 'r', 'B': 'g', 'C': 'b'}
In [29]: color = np.array([colors[dev] for dev in device])
In [30]: color
Out[30]: array(['r', 'g', 'b', 'r', 'g', 'b'], dtype='<U1')
用需要的颜色替换'rgb'
。长度必须大于len(np.unique(device))
。
可以使用
创建N种颜色的列表import colorsys
N = 5
HSV_tuples = [(x*1.0/N, 0.5, 0.5) for x in range(N)]
RGB_tuples = list(map(lambda x: colorsys.hsv_to_rgb(*x), HSV_tuples))
答案 2 :(得分:0)
一种更简单的方法是在 seaborn 软件包的图中使用 hue 选项,此选项根据其参数以不同的颜色绘制元素。例如:
import seaborn as sns
devID = [1, 2, 3, 1, 2, 3]
device = ['A', 'B', 'C', 'A', 'B', 'C']
sns.scatterplot(devID, devID, hue = device)
plt.show()