Есть ли способ отображать метки на графике только при нажатии? - PullRequest
1 голос
/ 28 мая 2019

Представьте, что у меня есть этот набор данных 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-средних для набора данных, используя:

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)))

Which returned this

Поскольку у меня более 500 точек данных, метки предсказуемо перекрываются и не могут быть прочитаны. Мне было интересно, если есть метод маркировки, когда метка отображается только при нажатии или наведении курсора на точку данных. Или любое другое решение приветствуется. Спасибо

1 Ответ

0 голосов
/ 28 мая 2019

Вы можете сделать это с plotlyadd_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
  )

enter image description here

Дополнительные руководства здесь и здесь .

...