使用matplotlib可视化3D聚类

时间:2017-04-18 15:16:22

标签: matplotlib cluster-analysis visualization

我集成了3个功能Feature1,Feature2和Feature3,并提出了2个集群。 我正在尝试使用matplotlib可视化3D集群。

在下表中,有三个功能可用于执行群集。群集数量为2.

    Feature1        Feature2    Feature3    ClusterIndex
  0 1.349656e-09    1.000000    1.090542e-09    0
  1 1.029752e-07    1.000000    6.040669e-08    0
  2 2.311729e-07    1.000000    1.568289e-11    0
  3 1.455860e-08    6.05e-08    1.000000        1
  4 3.095807e-07    2.07e-07    1.000000        1

试过这段代码:

   fig = plt.figure()
   ax = fig.add_subplot(111, projection='3d')
   x = np.array(df['Feature1'])
   y = np.array(df['Feature2'])
   z = np.array(df['Feature3'])
   ax.scatter(x,y,z, marker=colormap[kmeans.labels_], s=40)

但是,我收到错误"ValueError: could not convert string to float: red"。因此标记部分是我得到错误的地方。

通过绘制散点图中的点并将其与群集标签区分开来,可以非常简单地对群集进行2D可视化。

只是想知道有没有办法对集群进行三维可视化。

任何建议都将受到高度赞赏!!

1 个答案:

答案 0 :(得分:4)

原则上,问题的代码应该有效。然而,尚不清楚marker=colormap[kmeans.labels_]会做什么以及为什么需要它。

3D散点图与其2D版本完全相同。

标记参数会指示标记字符串,如"s""o"来确定标记形状。
可以使用c参数设置颜色。您可以提供单一颜色或阵列/颜色列表。在下面的示例中,我们只是将集群索引提供给c并使用颜色表。

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

v = np.random.rand(10,4)
v[:,3] = np.random.randint(0,2,size=10)
df = pd.DataFrame(v, columns=['Feature1', 'Feature2','Feature3',"Cluster"])
print (df)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = np.array(df['Feature1'])
y = np.array(df['Feature2'])
z = np.array(df['Feature3'])

ax.scatter(x,y,z, marker="s", c=df["Cluster"], s=40, cmap="RdBu")

plt.show()

enter image description here