【发布时间】:2021-10-23 23:14:06
【问题描述】:
我正在尝试更新以下函数以通过图例报告集群信息:
color_names = ["red", "blue", "yellow", "black", "pink", "purple", "orange"]
def plot_3d_transformed_data(df, title, colors="red"):
ax = plt.figure(figsize=(12,10)).gca(projection='3d')
#fig = plt.figure(figsize=(8, 8))
#ax = fig.add_subplot(111, projection='3d')
if type(colors) is np.ndarray:
for cname, class_label in zip(color_names, np.unique(colors)):
X_color = df[colors == class_label]
ax.scatter(X_color[:, 0], X_color[:, 1], X_color[:, 2], marker="x", c=cname, label=f"Cluster {class_label}" if type(colors) is np.ndarray else None)
else:
ax.scatter(df.Type, df.Length, df.Freq, alpha=0.6, c=colors, marker="x", label=str(clusterSizes) )
ax.set_xlabel("PC1: Type")
ax.set_ylabel("PC2: Length")
ax.set_zlabel("PC3: Frequency")
ax.set_title(title)
if type(colors) is np.ndarray:
#ax.legend()
plt.gca().legend()
plt.legend(bbox_to_anchor=(1.04,1), loc="upper left")
plt.show()
所以我调用我的函数来可视化集群模式:
plot_3d_transformed_data(pdf_km_pred,
f'Clustering rare URL parameters for data of date: {DATE_FROM} \nMethod: KMeans over PCA \nn_clusters={n_clusters} , Distance_Measure={DistanceMeasure}',
colors=pdf_km_pred.prediction_km)
print(clusterSizes)
遗憾的是我无法显示图例,我必须在 3D 绘图下手动打印集群成员。这是没有图例的输出,错误如下:
No handles with labels found to put in legend.
我检查了这个post,但我无法弄清楚正确传递集群标签列表的函数有什么错误。我想更新函数,以便我可以通过clusterSizes.index 演示集群标签,并通过clusterSizes.size 演示它们的规模
预期输出:正如here 建议更好地使用legend_elements() 来确定要显示的图例条目的有用数量并自动返回一个句柄和标签元组。
更新:正如我在预期输出中提到的,应该包含一个集群标签图例和另一个集群大小图例(每个集群中的实例数)。它也可能通过单个图例报告此信息。 请参见下面的 2D 示例:
【问题讨论】:
-
我并不完全理解您的所有问题,但我已经简化了您的代码并借用了@meTchaikovsky 的一些数据来创建图表。您的意思是要为每个集群创建此图例吗?这个图例的目的是可视化大小,所以我不确定是否可以为每个集群创建它。此外,可以在不将其划分为集群的情况下可视化大小。
-
我也有点困惑。例如,问题提到了
clusterSizes.index和clusterSizes.size,这听起来像是一个数据框,但代码使用了str(clusterSizes),这对于数据框没有意义。 -
如果它确实是一个数据框并且理想情况下是预期输出的草图/模型,那么查看
clusterSizes会有所帮助 -
@r-beginners 感谢您提供用于快速调试的笔记本。我在帖子末尾包含了更新以使其清楚。我检查了笔记本,第二个图例表明预测的集群标签仍然缺失。
-
@tdy 感谢您的意见。聚类算法的结果可以通过 BigData 的 spark 数据帧报告/传递。问题是提供自动图例,以在集群标签和集群大小方面指示集群结果,以使用嵌入式方法(例如 PCA)了解异常值的模式,以获得更好的可视化。请参阅此notebook。我想更新自动绘制和可视化所有集群信息的功能。
标签: python matplotlib legend