【问题标题】:Is there a way to display labels in a plot only when clicked on?有没有办法仅在单击时才在绘图中显示标签?
【发布时间】:2019-10-14 03:06:13
【问题描述】:

假设我有这个数据集,data1(后缩放和 PCA)。

            F1    F2     F3  F4   F5 ... F21
1          0.28  2.29  5.64 1.04 3.92    1065
2          0.26  1.28  4.38 1.05 3.40    1050
3          0.30  2.81  5.68 1.03 3.17    1185
4          0.24  2.18  7.80 0.86 3.45    1480
5          0.39  1.82  4.32 1.04 2.93     735
.
.
.
1000       0.34  1.97  6.75 1.05 2.85    1450

我使用以下方法对数据集进行了 k-means 聚类分析:

Clusters <- kmeans(data1, 5, nstart = 25)
data1 <- data.frame(data1)
data1 <- data1 %>% mutate(Cluster = Clusters$cluster)

然后我从另一个数据集中插入了字符类型的行名:

rownames(data1) <- data2$Name

然后,为了避免标签重叠,我使用了

p1 <- autoplot(Clusters, data = data1, frame = TRUE, label = F, x=1, y=2)
p2 <- p1 + geom_text_repel(aes(label = rownames(data1)))

由于我有超过 500 个数据点,因此标签可能会重叠并且无法读取。我想知道当标签仅在您单击或悬停在数据点上时显示时是否有标签方法。或者欢迎任何其他解决方案。谢谢

【问题讨论】:

  • 请分享一个可重现的例子。
  • 您打算如何使用或显示交互式图形?这需要将其扩展到 plotly、rcharts、highcharts、d3 等。有很多选择,但我们不知道您想要哪个,这使得这是一个边界推荐问题,这在 SO 上是题外话。跨度>

标签: r plot label cluster-analysis ggrepel


【解决方案1】:

您可以使用plotly 完成此操作。使用add_trace(),您只能在悬停时显示标签。

library(ggplot2)
library(plotly)
library(dplyr)

data <- mtcars[, c("mpg", "wt")] # just two features

k_data <- kmeans(data, 3) # find clusters

现在让我们将集群信息添加到data

data <- cbind(data, cluster=k_data$cluster)
#                mpg    wt cluster
# Mazda RX4     21.0 2.620       1
# Mazda RX4 Wag 21.0 2.875       1
# Datsun 710    22.8 2.320       1

现在我们可以绘制所有内容了:

plot_ly(data = data, x = ~mpg, y = ~wt, color = ~as.factor(cluster)) %>% 
  add_trace(
    type = 'scatter',
    mode = 'markers',
    text = rownames(data), # when you hover on a point it will show it's rowname
    hoverinfo = 'text',
    showlegend = F
  )

更多指南herehere

【讨论】:

  • 当我使用它时,我只会在情节上得到一个点。当我将鼠标悬停在它上面时,我可以看到它的标签,这正是我想要做的,但情节本身有问题。我的数据集中有 21 个特征,但是当我将 x = 1, y = 2 与 autoplot 一起使用时,集群会正确显示
  • 不要使用1,2..ecc 作为列名,例如使用x1,x2,..。然后你可以使用x = ~x1, y = ~x2
  • 我使用了 PCA,这就是它与 autoplot 一起使用的原因。我无法调整它以适用于 plot_ly 函数。我再次尝试了 x = 1 和 y = 2,但似乎没有用
  • 看我上面的第二条评论,你应该以不同的方式命名列。
  • 上例中的 1 和 2 参考了我的 PCA 的 PC1 和 PC2。正在命名导致它无法与 plot_ly 一起使用的原因
猜你喜欢
  • 1970-01-01
  • 2020-11-13
  • 2013-10-22
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 1970-01-01
相关资源
最近更新 更多