У меня есть список данных X
, который представляет собой матрицу Nx2. Я хочу построить первые элементы каждого X
против всех вторых элементов X
. Сначала я разделил все первые и вторые элементы X
на их собственные списки: X_comp1
, X_comp2
У меня также есть список категорий Nx1 (cat), который показывает, к какой категории относятся элементы принадлежат X, т. е. если cat[i] = 3
, это означает, что X[i]
относится к категории 3.
Я хотел бы использовать разные цветные точки на диаграмме рассеяния для каждой категории.
До сих пор мне удавалось добиться этого только с помощью жесткого кодирования, но это станет очень неэффективным, когда будет больше категорий. Вот мой код (предполагается, что будет 5 категорий):
#sample of X data
X = [[-0.13085379 -0.05958517],[ 0.02593188 -0.17576942],[-0.12505032 -0.02709171],[ 0.09790905 -0.18046944],[ 0.06437596 -0.20600157],[ 0.16287853 -0.2955353 ],[-0.52093842 0.33463338],[-0.03240038 -0.05431373],[-0.09645192 -0.14241157],[ 0.0807245 -0.26893815]]
X_comp1 = []#hold all the first components of X
X_comp2 = []#hold all the second components of X
cat = [1,3,2,1,5,3,2,4,4,1]
#for testing just use 10 values, full file has over 3000 entries and 50 categories
for i in range(10):
X_comp1.append(X[i][0])
X_comp2.append(X[i][1])
for x1,x2,c in zip(X_comp1,X_comp2,cat):
if c == 1:
plt.scatter(x1,x2,c = 'b')
elif c == 2:
plt.scatter(x1,x2,c = 'g')
elif c == 3:
plt.scatter(x1,x2,c = 'r')
elif c == 4:
plt.scatter(x1,x2,c = 'c')
elif c == 5:
plt.scatter(x1,x2,c = 'm')
plt.legend([1,2,3,4,5])
plt.show()
Я хотел бы сделать его более гибким для количества категорий, чтобы мне не пришлось в конечном итоге писать нагрузки, если утверждения для каждой категории.
Чтобы достичь этого, я подумал о наличии списка цветов:
colours = ["b", "g", "r", "c", "m",...]#number of colours depends on no. of categories
#This is the only element which I would like remain hard coded, as I want to choose the colours
Где каждый цвет соответствует категории. Затем программа перебирает все данные и строит каждую точку в соответствии с категорией. Но я не уверен, как это можно реализовать.