我生成了下面的圖,它根據藥物對資料進行分組。然后我創建了另一個資料框,通過計算平均值來總結主要資料。然后將這些平均值(按藥物分組)以三角形添加到圖中。使用 stat_summary 連接的手段。現在我想知道如何使用 ggplotly 將平均值資料(包括帶有自定義標簽的 x 和 y 值)的工具提示添加到繪圖中。當前工具提示僅包含主要資料的資訊
資料:
Day,Drug,Sex,Y
1,A,Female,2.192306074
1,B,Male,4.551912798
1,B,Female,1.574070652
1,C,Female,-0.143946163
1,A,Male,5.144422967
1,C,Male,5.724705829
2,A,Male,2.691617258
2,B,Female,-3.0289955
2,C,Male,0.338102762
2,A,Female,-0.558581233
2,B,Female,-2.942620032
2,C,Male,1.024670497
3,A,Male,2.264980803
3,C,Female,2.103722883
3,A,Female,2.091621938
3,B,Male,1.535299922
3,B,Male,1.618399767
3,C,Female,0.136160703
復制后,您可能需要運行以下命令將其轉換為資料框:
df <- read.delim("clipboard", sep = ",")
我的變數在字串中:
grouping_var <- "Drug"
x <- "Day"
y <- "Y"
color <- "Sex"
這是該情節的代碼:
text <- paste("X:", df[[grouping_var]], "<br>",
"Y:", df[[y]], "<br>",
"group:", grouping_var, "<br>",
"color:", color)
mean_df <- df %>% group_by(get(x), get(grouping_var)) %>% summarise(Mean = mean(get(y)), .groups = "drop") %>%
rename(x = 1, grouping_var = 2)
p <- df %>% ggplot(aes(x = get(x), y = get(y), text = text))
geom_point(aes_string(group = grouping_var, color = color))
stat_summary(fun=mean, geom="line", aes_string(group = grouping_var), color = "red", lty = 2)
geom_point(data = mean_df, aes(x = x, y = Mean, group = grouping_var, color = grouping_var),
pch = 2, size = 3,inherit.aes = F)
xlab(x)
ylab(y)
ggplotly(p, tooltip = c("text"))
輸出:
uj5u.com熱心網友回復:
實作您想要的結果并向摘要點添加工具提示的一般方法是text
在您的第二個中映射 aes geom_point
。但是,恕我直言,您可以稍微簡化代碼,并作為副作用擺脫aes_string
(已棄用,ggplot2 3.4.0
因此應替換為aes
)。為此,您可以簡單地將原始變數重命名為x
、y
和。其次,我使用一些小的自定義函式來創建工具提示文本。最后,我用.group
color
stat_summary
geom_line
library(ggplot2)
library(plotly)
text1 <- function(x, y, group, color) {
paste0(
"X: ", x, "<br>",
"Y: ", y, "<br>",
"group (Drug): ", group, "<br>",
"color (Sex): ", color
)
}
text2 <- function(x, y, group, color) {
paste0(
"X: ", x, "<br>",
"Y: ", y, "<br>",
"group (Drug): ", group, "<br>"
)
}
df <- df %>%
rename(x = x, y = y, group = grouping_var, color = color) %>%
mutate(text = text1(x, y, group, color))
mean_df <- df %>%
group_by(x, group) %>%
summarise(y = mean(y), .groups = "drop") %>%
mutate(text = text2(x, y, group, color))
p <- df %>% ggplot(aes(
x = x, y = y, text = text
))
geom_point(aes(group = group, color = color))
geom_line(
data = mean_df,
aes(group = group),
color = "red", lty = 2
)
geom_point(
data = mean_df,
aes(color = group, text = text),
pch = 2, size = 3
)
xlab(x)
ylab(y)
ggplotly(p, tooltip = c("text"))
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/532632.html
上一篇:在R中的資料框中填充缺失值