我正在使用ggplot2
并构建了一个像这样的箱形图:
这是使用以下数据和代码构建的:
structure(list(group = c("C", "C", "C", "C", "C", "C", "C", "C",
"C", "C", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "V", "V", "V", "V", "V",
"V", "V", "V", "V", "V", "C", "C", "C", "C", "C", "V", "V", "V",
"V", "V", "V", "V", "V", "V", "V", "C", "C", "C", "C", "C", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V", "C", "C",
"C", "C", "C", "C", "C", "C", "C", "C", "V", "V", "V", "V", "V",
"V", "V", "V", "V", "V", "C", "C", "C", "C", "C", "C", "C", "C",
"C", "V", "V", "V", "V", "V", "V", "V", "V", "V", "V"), fruit = c("apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "apple", "apple", "apple", "apple", "apple", "apple",
"apple", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "orange", "orange", "orange",
"orange", "orange", "orange", "orange", "pear", "pear", "pear",
"pear", "pear", "pear", "pear", "pear", "pear", "pear", "pear",
"pear", "pear", "pear", "pear", "pear", "pear", "pear", "pear",
"pear", "pear", "pear", "pear", "pear", "pear", "pear", "pear",
"pear", "pear", "pear", "pear", "pear", "pear", "pear"), treatment = c("pre",
"pre", "pre", "pre", "pre", "post", "post", "post", "post", "post",
"pre", "pre", "pre", "pre", "pre", "post", "post", "post", "post",
"post", "pre", "pre", "pre", "pre", "pre", "post", "post", "post",
"post", "pre", "pre", "pre", "pre", "pre", "post", "post", "post",
"post", "post", "pre", "pre", "pre", "pre", "pre", "pre", "pre",
"pre", "pre", "pre", "post", "post", "post", "post", "post",
"pre", "pre", "pre", "pre", "pre", "post", "post", "post", "post",
"post", "pre", "pre", "pre", "pre", "pre", "post", "post", "post",
"post", "post", "pre", "pre", "pre", "pre", "pre", "post", "post",
"post", "post", "post", "pre", "pre", "pre", "pre", "pre", "pre",
"pre", "pre", "pre", "pre", "pre", "pre", "pre", "pre", "pre",
"post", "post", "post", "post", "post", "pre", "pre", "pre",
"pre", "pre", "post", "post", "post", "post", "pre", "pre", "pre",
"pre", "pre", "post", "post", "post", "post", "post"), subgroup = c(66,
66, 66, 66, 66, 66, 66, 66, 66, 66, 67, 67, 67, 67, 67, 67, 67,
67, 67, 67, 68, 68, 68, 68, 68, 68, 68, 68, 68, 69, 69, 69, 69,
69, 69, 69, 69, 69, 69, 70, 70, 70, 70, 70, 71, 71, 71, 71, 71,
71, 71, 71, 71, 71, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 73,
73, 73, 73, 73, 73, 73, 73, 73, 73, 74, 74, 74, 74, 74, 74, 74,
74, 74, 74, 75, 75, 75, 75, 75, 76, 76, 76, 76, 76, 77, 77, 77,
77, 77, 77, 77, 77, 77, 77, 78, 78, 78, 78, 78, 78, 78, 78, 78,
79, 79, 79, 79, 79, 79, 79, 79, 79, 79), conc = c(0.074, 0.204,
0.118, 0.25, 0.159, 0.283, 0.253, 0.436, 0.295, 0.335, 0.204,
0.424, 0.254, 0.217, 0.281, 0.153, 0.309, 0.184, 0.341, 0.168,
0.14, 0.213, 0.29, 0.266, 0.522, 0.219, 0.34, 0.317, 0.053, 0.196,
0.072, 0.185, 0.269, 0.157, 0.344, 0.398, 0.304, 0.173, 0.212,
0.197, 0.154, 0.289, 0.212, 0.217, 0.314, 0.337, 0.116, 0.209,
0.256, 0.165, 0.216, 0.284, 0.148, 0.151, 0.105, 0.097, 0.201,
0.125, 0.208, 0.334, 0.209, 0.269, 0.388, 0.182, 0.12, 0.28,
0.253, 0.226, 0.257, 0.193, 0.314, 0.262, 0.12, 0.415, 0.2, 0.209,
0.202, 0.08, 0.341, 0.221, 0.598, 0.327, 0.258, 0.655, 0.071,
0.209, 0.234, 0.19, 0.117, -0.01, 0.074, 0.038, 0.06, 0.088,
0.034, 0.057, 0.099, 0.046, 0.096, 0.166, 0.045, 0.104, 0.08,
0.248, 0.031, 0.056, 0.101, 0.077, 0.069, 0.251, 0.585, 0.427,
0.145, 0.109, 0.125, 0.079, 0.068, 0.064, 0.184, 0.202, 0.263,
0.302, 0.136)), .Names = c("group", "fruit", "treatment", "subgroup",
"conc"), row.names = c(NA, -123L), class = "data.frame")
require(ggplot2)
plot<-ggplot(prot, aes(x=group, y=conc, fill=factor(treatment)))+
geom_boxplot() +
scale_fill_manual(values=cbPalette)+
theme_bw()+
facet_grid(.~fruit)+
labs(fill="treatment status", y="Concentration (mg.ml-1) ") +
theme(legend.position="bottom", axis.title.y=element_text(size=12, hjust=0.5, vjust=1, face="bold"), axis.text.y=element_text(size=8), axis.title.x=element_text(size=12, hjust=0.5, vjust=0.5, face="bold"), axis.text.x=element_text(size=8)) +
scale_y_continuous(limits=c(-0.01,0.7), breaks=seq(0,0.7,0.1))
我现在想添加小写字母,例如a,b,c高于某些箱图,表示统计显着性。例如,第一小平面中的第一个框之上的“a”和第二小平面中的第二个和第三个框之上的“b”。但是,我似乎只能在每个方面或单个方面的所有字母中重复出现字母。
在许多其他根本不起作用的事情中,我对这些尝试非常接近:
plot+ annotate("text", label =c("a", "b", "c"), size = 4, x =c(2,1,2), y = c(0.5, 0.3, 0.4))
和
df1<-data.frame(group=c(0.8, 1.2, 1.8, 2.2), conc=c(0.4, 0.4), lab="text", id=factor("apple", levels=c("apple", "orange", "pear")), treatment=factor(2, levels=c("pre", "post")))
plot+ geom_text(data=df1, label=c("a", "b", "a", "d"))
我觉得我需要更好地指定facet“id = factor(”apple“....如果我只希望在一个方面注释,但不是多个。
答案 0 :(得分:0)
执行此操作的常用方法是创建包含绘图信息的新数据集。此数据集应包含三个分组变量(水果,组和处理)中的每一个的信息,以便正确放置文本。它还将包含要为每个箱图添加的标签的变量,以及y的位置。标签应放在每个箱图上方。
以下是如何制作此数据集的示例。我正在使用 dplyr 中的一些函数将三个分组变量以与绘图相同的顺序放入数据集中(按水果排序,然后是组,然后是处理)。
library(dplyr)
prot2 = distinct(prot, fruit, group, treatment) %>%
arrange(fruit, group, treatment)
现在添加y位置。您可能希望每个方框都有不同的展示位置,但此处我使用原始数据集中的最大conc
加上一点点。
prot2$yloc = max(prot$conc) + .05
现在是标签。如果您在某处存储了其他信息,告诉您哪些标签放在哪个箱图上,这将是最简单的。在这里,我用手写出来为第一个面板中的第一个框添加“a”,为第二个面板中的中间两个框添加“b”,小心地匹配prot2
的顺序。我已为其他所有内容添加了NA,因此我可以在position_dodge
中使用geom_text
。
prot2$label = c("a", NA, NA, NA, NA, "b", "b", NA, NA, NA, NA, NA)
现在通过geom_text
将文字添加到地图中,使用position_dodge
来正确排列内容。我必须更改y限制,以便标签显示,您可以在scale_y_continuous
之前执行此操作。
plot +
ylim(NA, max(prot$conc) + .05) +
geom_text(data = prot2, aes(y = yloc, label = label),
position = position_dodge(width = .75))
答案 1 :(得分:0)
我尝试使用相同的方法添加注释。从excel导入数据并使用以下代码
view(pans)
head(pans)
rep <- factor(pans$rep)
trt <- factor(pans$trt)
yr <- factor(pans$yr)
st <- factor(pans$st)
p <- ggplot(pans, aes(x = st, y = act))
q<-p + geom_boxplot(aes(fill = trt), position = position_dodge(0.8)) +
stat_summary(fun = mean, geom = "point", shape=5, size=1.5,
aes(group = trt), position = position_dodge(0.8)) +
scale_fill_manual(name="System", values = c("grey50","grey90", "grey100")) +
facet_grid(. ~ yr)+
theme_bw()
plot<-q + scale_x_discrete(breaks=c("b","h"), labels=c("BS", "AH"))
plot2<-plot + theme(axis.title.x = element_blank())
plot2
我得到了以下情节 enter image description here
#用于添加我使用的比较字母
pans2 = distinct(pans, yr, st, trt) %>%
arrange(yr, st, trt)
pans2$yloc = max(pans$act) + .05
prot2$label = c("a", "b", "a", "b", "b", "b", "a", "b", "a", "b", "b", "b")
plot2 + geom_text(data = pans2, aes(y = yloc, label = label),
position = position_dodge(width = .75))
但是,我收到以下错误
不知道如何为函数类型的对象自动选择比例。默认为连续。
错误:美学必须是有效的数据列。有问题的美学:标签 = 标签。
您是否输入了数据列的名称或忘记添加 after_stat()?
运行 rlang::last_error()
以查看错误发生的位置。