Изменение цвета трехмерной диаграммы рассеяния на основе определенного столбца - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть некоторый пример информации, как показано ниже, и я хочу сделать трехмерный график рассеяния с другим цветом рассеяния на основе «кластеров» (например, 0,1,2)

ID    TP    ALB   BUN   clusters
1     153   101  698    1
2     100   90   400    0
3     50    199  500    1
4     113   102  340    2

В настоящее времяЯ попытался:

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure(figsize=(10, 8))
ax1 = fig.add_subplot(111,projection='3d')

for i in range(len(df_tr)):
    x, y, z = df_tr.iloc[i]['BUN'], df_tr.iloc[i]['ALB'], df_tr.iloc[i]['TP']
    ax1.scatter(x, y, z, c=['blue'])
    ax1.text(x, y, z, '{0}'.format(df_tr.iloc[i] 
    ['clusters']), size=12)

ax1.set_xlabel('BUN')
ax1.set_ylabel('ALB')
ax1.set_zlabel('TP')   

ax1.legend('012')
plt.show()

Получение результата разброса имеет информацию о кластере (0,1 и 2), но есть ли в любом случае изменить цвет разброса на основе ifnormation для конкретного столбца с помощью Axes3D?

Current result

1 Ответ

0 голосов
/ 03 декабря 2018

Составьте список цветов на основе ожидаемого числа различных clusters, которых вы ожидаете (если не очень высокое), например,

colors = ['blue', 'green', 'red']

Затем просто используйте значение clusters в качествеиндекс списка, чтобы получить цвет;

colors = ['blue', 'green', 'red']
for i in range(len(df_tr)):
    x, y, z = df_tr.iloc[i]['BUN'], df_tr.iloc[i]['ALB'], df_tr.iloc[i]['TP']
    ax1.scatter(x, y, z, c=colors[int(df_tr.iloc[i]['clusters'])])
...