使用 matplotlib 可视化 3D 聚类
Visualizing 3D clustering using matplotlib
我已经聚类了 3 个特征 Feature1、Feature2 和 Feature3,并提出了 2 个聚类。
我正在尝试使用 matplotlib 可视化 3D 集群。
在下面的 table 中,对三个特征执行聚类。簇数为 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"
。因此,标记部分是我得到错误的地方。
簇的二维可视化非常简单,只需在散点图中绘制点并使用簇标签进行区分即可。
只是想知道有没有办法对集群进行 3D 可视化。
如有任何建议,我们将不胜感激!!
原则上,问题中的代码应该可以工作。然而,尚不清楚 marker=colormap[kmeans.labels_]
会做什么以及为什么需要它。
3D 散点图与它的 2D 版本完全一样。
标记参数需要一个标记字符串,如 "s"
或 "o"
来确定标记形状。
可以使用 c
参数设置颜色。您可以提供单一颜色或 array/a 颜色列表。在下面的示例中,我们只是将聚类索引提供给 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()
我已经聚类了 3 个特征 Feature1、Feature2 和 Feature3,并提出了 2 个聚类。 我正在尝试使用 matplotlib 可视化 3D 集群。
在下面的 table 中,对三个特征执行聚类。簇数为 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"
。因此,标记部分是我得到错误的地方。
簇的二维可视化非常简单,只需在散点图中绘制点并使用簇标签进行区分即可。
只是想知道有没有办法对集群进行 3D 可视化。
如有任何建议,我们将不胜感激!!
原则上,问题中的代码应该可以工作。然而,尚不清楚 marker=colormap[kmeans.labels_]
会做什么以及为什么需要它。
3D 散点图与它的 2D 版本完全一样。
标记参数需要一个标记字符串,如 "s"
或 "o"
来确定标记形状。
可以使用 c
参数设置颜色。您可以提供单一颜色或 array/a 颜色列表。在下面的示例中,我们只是将聚类索引提供给 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()