根据特定列更改3D散点图颜色

时间:2018-12-03 03:51:16

标签: python matplotlib cluster-analysis

我有一些如下所示的信息示例,我想基于“簇”(例如0,1,2)制作具有不同散点颜色的3D散点图

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),但是是否有使用Axes3D根据特定列上的ifnormation更改散点图颜色的信息?

Current result

1 个答案:

答案 0 :(得分:1)

例如,根据您期望的不同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'])])