我想使用 制作 PCA 分數圖ggplot2
,然后使用plotly
.
我想要做的是添加一個框架(不是使用橢圓stat_ellipse
,我知道它有效)。
我的問題是,當我嘗試使用示例名稱tooltip
時ggplotly
,框架會消失。我不知道如何解決它。
下面是我的代碼
library(ggplot2)
library(plotly)
library(dplyr)
## Demo data
dat <- iris[1:4]
Group <- iris$Species
## Calculate PCA
df_pca <- prcomp(dat, center = T, scale. = FALSE)
df_pcs <- data.frame(df_pca$x, Group = Group)
percentage <-round(df_pca$sdev^2 / sum(df_pca$sdev^2) * 100, 2)
percentage <-paste(colnames(df_pcs),"(", paste(as.character(percentage), "%", ")", sep = ""))
## Visualization
Sample_Name <- rownames(df_pcs)
p <- ggplot(df_pcs, aes(x = PC1, y = PC2, color = Group, label = Sample_Name))
xlab(percentage[1])
ylab(percentage[2])
geom_point(size = 3)
ggplotly(p, tooltip = "label")
直到這里它作業!您可以看到樣本名稱可以正確顯示在 ggplotly 圖中。
接下來我嘗試添加一個框架
## add frame
hull_group <- df_pcs %>%
dplyr::mutate(Sample_Name = Sample_Name) %>%
dplyr::group_by(Group) %>%
dplyr::slice(chull(PC1, PC2))
p2 <- p
ggplot2::geom_polygon(data = hull_group, aes(fill = Group), alpha = 0.1)
您可以看到靜態圖仍然有效!框架已正確添加。
但是,當我嘗試將其轉換為情節互動情節時。框架消失了。
ggplotly(p2, tooltip = "label")
非常感謝你的幫助。
uj5u.com熱心網友回復:
如果您將data
andmapping
從ggplot()
呼叫移動到呼叫,它會起作用geom_point()
:
p2 <- ggplot()
geom_point(data = df_pcs, mapping = aes(x = PC1, y = PC2, color = Group, label = Sample_Name), size = 3)
ggplot2::geom_polygon(data = hull_group, aes(x = PC1, y = PC2, fill = Group, group = Group), alpha = 0.2)
ggplotly(p2, tooltip = "label")
您可能想要更改 的順序geom_point
并geom_polygon
確保這些點位于多邊形的頂部(這也會影響工具提示的位置)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/498314.html