【问题标题】:How to annotate certain data points on a python scatterplot based on column value如何根据列值注释python散点图上的某些数据点
【发布时间】:2020-09-27 00:16:45
【问题描述】:

我的第一个真正的 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 的情况吗?

【问题讨论】:

  • This answer 展示了如何在数据点附近单独添加标签。在示例中,它们会遍历所有点,但您不必这样做。
  • 哦,等等,您正在使用 Seaborn。但它可能仍然有效,我不确定。
  • 这能回答你的问题吗? Adding labels in x y scatter plot with seaborn
  • 这就是我现在所处的位置。但是,标记所有数据点太混乱了。我想根据数据框中的列值标记某些数据点。
  • 副本中的答案使用整个数据框显示,您只需 Boolean select 您想要的点并传递它而不是整个数据框。

标签: python pandas dataframe matplotlib scatter-plot


【解决方案1】:

您可以对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 也有答案。

【讨论】:

  • 太棒了!这行得通。现在,有没有一种可能的方法来延长文本和点之间的距离?
  • 这里不能调用adjust_text 吗?我不熟悉那个模块。
  • 确实如此,我现在只需要弄清楚如何获得一条将文本引导到正确位置的行。我会检查文档
猜你喜欢
  • 2021-02-27
  • 2020-08-22
  • 2013-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-09-14
  • 2013-06-16
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多