I have some example of information as shown below and I want to make 3D scatter plot with different color of the scatter based on the "clusters" (e.g. 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
Currently I have tried:
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()
Getting the result of the scatter has the cluster information (0,1, and 2), but is there anyway to change the scatter color based on the ifnormation on specific column using Axes3D?
Make a list of colors based on the expected number of different clusters
you expect (as long as is not very high), for example
colors = ['blue', 'green', 'red']
Then just use the clusters
value as index of the list to get the color;
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'])])