如何基于列值在python散点图上注释某些数据点

2024-05-29 09:35:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我几乎完成了我的第一个真正的python数据科学项目。然而,还有最后一件事我似乎不明白。我有以下代码为我的PCA和K均值聚类算法创建一个图:

y_axis = passers_pca_kmeans['Component 1']
x_axis = passers_pca_kmeans['Component 2']

plt.figure(figsize=(10,8))
sns.scatterplot(x_axis, y_axis, hue=passers_pca_kmeans['Segment'], palette=['g','r','c','m'])
plt.title('Clusters by PCA Components')
plt.grid(zorder=0,alpha=.4)

texts = [plt.text(x0,y0,name,ha='right',va='bottom') for x0,y0,name in zip(
    passers_pca_kmeans['Component 2'], passers_pca_kmeans['Component 1'], passers_pca_kmeans.name)]

adjust_text(texts)

plt.show
  • 我最终得到了使用adjustText注释点的正确代码,但是我的绘图有太多的点,无法标记它们;看起来到处都是文字,一团糟
  • 我想根据'Segment'列中的值对散点图进行注释。
    • 此列中的值是我的四个集群的名称'first''second''third''fourth'
  • 如何将我的adjustText代码更改为只注释'Segment'='first'所在的点?
    • 这会是一种np.where情况吗

Tags: 代码textnamesegmentpltcomponentkmeanspca
1条回答
网友
1楼 · 发布于 2024-05-29 09:35:00

您可以将输入布尔切片到text调用中,类似于:

mask = (passers_kca_means["Subject"] == "first")
x = passers_kca_means["Component 2"][mask]
y = passers_kca_means["Component 1"][mask]
names = passers_kca_means.name[mask]

texts = [plt.text(x0,y0,name,ha='right',va='bottom') for x0,y0,name in zip(x,y,names)]

您还可以通过添加if条件来进行不规则的列表理解:


x = passers_kca_means["Component 2"]
y = passers_kca_means["Component 1"]
names = passers_kca_means.name
subjects = passers_kca_means["Subject"]

texts = [plt.text(x0,y0,name,ha='right',va='bottom') for x0,y0,name,subject in zip(x,y,names,subjects) if subject == "first"]

我打赌np.where也有答案

相关问题 更多 >

    热门问题