r - 如何使 geom_jitter() 在 R 中分组 ggplot2 条形图中的各个条形图中显示点?
问题描述
我正在尝试创建一个分组条形图,其中显示在各个条形图中的点以及显示标准偏差的误差线。以下 R 脚本生成下图所示的图形。条上的点分散在一组中,而不是出现在不同的条中。
有人可以指出我错过了什么吗?
library(dplyr)
library(ggplot2)
library(plotly)
library(ggpubr)
df <- data.frame(Sample = c("0.5-1 DMSO (24) CD3-28","0.5-1 DMSO (24) CD3-28","0.5-1 DMSO (24)",
"0.5-1 DMSO (24)","1-1 DMSO (24) CD3-28","1-1 DMSO (24) CD3-28",
"1-1 DMSO CD3-28","1-1 DMSO","1-1 DMSO (24)","1-1 DMSO (24)","3-1 DMSO",
"3-1 DMSO (24)","3-1 DMSO (24)","3-1 DMSO (24) BR","3-1 DMSO (24) BR CD3-28",
"3-1 DMSO CD3-28","3-1 DMSO (24) CD3-28","3-1 DMSO (24) CD3-28",
"0.5-1 0.1uM (24) CD3-28","0.5-1 0.1uM (24) CD3-28","0.5-1 0.1uM (24)",
"0.5-1 0.1uM (24)","1-1 0.1uM (24) CD3-28","1-1 0.1uM (24) CD3-28","1-1 0.1uM CD3-28",
"1-1 0.1uM","1-1 0.1uM (24)","1-1 0.1uM (24)","3-1 0.1uM","3-1 0.1uM (24)",
"3-1 0.1uM (24)","3-1 0.1uM (24) BR","3-1 0.1uM (24) BR CD3-28","3-1 0.1uM CD3-28",
"3-1 0.1uM (24) CD3-28","3-1 0.1uM (24) CD3-28","0.5-1 1uM (24) CD3-28",
"0.5-1 1uM (24) CD3-28","0.5-1 1uM (24)","0.5-1 1uM (24)","1-1 1uM (24) CD3-28",
"1-1 1uM (24) CD3-28","1-1 1uM CD3-28","1-1 1uM (24)","1-1 1uM (24)","1-1 1uM",
"3-1 1uM","3-1 1uM (24)","3-1 1uM (24)","3-1 1uM (24) BR","3-1 1uM (24) BR CD3-28",
"3-1 1uM CD3-28","3-1 1uM (24) CD3-28","3-1 1uM (24) CD3-28"),
Group = c("0.5_1 + Stim","0.5_1 + Stim","0.5_1","0.5_1","1_1 + Stim","1_1 + Stim","1_1 + Stim","1_1","1_1","1_1",
"3_1","3_1","3_1","3_1 + BR","3_1 + BR","3_1 + Stim","3_1 + Stim","3_1 + Stim","0.5_1 + Stim","0.5_1 + Stim",
"0.5_1","0.5_1","1_1 + Stim","1_1 + Stim","1_1 + Stim","1_1","1_1","1_1","3_1","3_1","3_1","3_1 + BR",
"3_1 + BR","3_1 + Stim","3_1 + Stim","3_1 + Stim","0.5_1 + Stim","0.5_1 + Stim","0.5_1","0.5_1","1_1 + Stim",
"1_1 + Stim","1_1 + Stim","1_1","1_1","1_1","3_1","3_1","3_1","3_1 + BR","3_1 + BR","3_1 + Stim","3_1 + Stim","3_1 + Stim"),
Concentration = c("DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO","DMSO",
"DMSO","DMSO","DMSO","DMSO","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM",
"0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","0.1uM","1uM","1uM","1uM","1uM",
"1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM","1uM"),
Marker = c(29.1,35.5,20,11.8,48.9,41.2,19.4,2.49,21.6,17.7,5.52,51.5,42.5,8.5,45.2,17.1,
67,58.5,42.7,36.4,16,22.4,42.2,50.3,33.4,5.88,27.9,21.5,22.9,62.5,35.3,17,50.4,
49,65.2,65.3,52.9,37.3,19.1,16.1,52.7,46.5,45.1,30.9,28.9,6.62,13.1,87.4,52.1,19.8,63.7,55.3,88.4,66.4))
df.summary <- df %>%
dplyr::group_by(Sample, Group, Concentration) %>%
dplyr::summarize(sd = sd(Marker, na.rm = TRUE), Marker = mean(Marker))
Concn <- factor(df.summary$Concentration, levels=c("DMSO","0.1uM","1uM"))
p <- ggplot(data = df.summary, aes(x = Group, y = Marker, fill = Concn)) +
geom_bar(stat="identity", position=position_dodge(.9)) +
geom_jitter( position = position_jitter(0.5), color = "black") +
geom_errorbar(data = df.summary,aes(ymin = as.double(df.summary$Marker) - as.double(df.summary$sd),
ymax = as.double(df.summary$Marker) + as.double(df.summary$sd)),
width = 0.2, position=position_dodge(0.9)) +
scale_fill_manual(values = c("DMSO" = '#619CFF',"0.1uM" = '#F8766D',"1uM" = '#00BA38')) + theme_bw()
p <- ggpar(p, x.text.angle = 45)
ggplotly(p)
解决方案
而不是position = position_jitter(0.5)
,使用position = position_jitterdodge(0.5)
. 另外,你不需要写喜欢df.summary$sd
的geom_errorbar
部分,因为你已经data = df.summary
在代码的前面设置了
ggplot(data = df.summary, aes(x = Group, y = Marker, fill = Concn)) +
geom_bar(stat="identity", position=position_dodge(.9)) +
geom_jitter( position = position_jitterdodge(0.5), color = "black") +
geom_errorbar(aes(ymin = as.double(Marker) - as.double(sd),
ymax = as.double(Marker) + as.double(sd)),
width = 0.2, position=position_dodge(0.9)) +
scale_fill_manual(values = c("DMSO" = '#619CFF',"0.1uM" = '#F8766D',"1uM" = '#00BA38')) + theme_bw()
推荐阅读
- node.js - 为我的聊天机器人/助手服务使用@Sys.Any 实体(设计问题)
- keycloak - Keycloak 用户角色映射和权限
- javascript - Nuxt js在api文件夹更改时重新启动服务器
- twilio - Twilio REST BindingResource 错误“无法将服务实例与帐户匹配”
- java - 如何正确编写 evaluatePostfix 函数?
- batch-file - 用于自动映射网络驱动器但无法检测网络驱动器的批处理脚本
- php - 如何在 PHP 中从下拉列表中检索数据到文本框?
- python - bigQuery Google Cloud 如何与其他用户共享数据集?使用蟒蛇
- ios - 键盘显示通知 iOS 的扩展
- android - PlaceAutocompleteFragment - null 不能转换为非 null 类型(Kotlin)