我有这个数据集
df <- data.frame(groups=factor(c(rep("A",6), rep("B",6), rep("C",6))),
types=factor(c(rep(c(rep("Z",2), rep("Y",2), rep("X",2)),3))),
values=c(10,11,1,2,0.1, 0.2, 12,13, 2,2.5, 0.2, 0.01,
12,14, 2,3,0.1,0.2))
library(ggplot2)
px <- ggplot(df, aes(groups, values)) + facet_wrap(~types, scale="free") + geom_point()
px
我进行了事后分析(每个类型级别的值〜组),并创建了一个数据集,其中包含重要性组(如字母:a,b,c等):
df.text <- data.frame(groups=factor(c(rep("A",3), rep("B",3), rep("C",3))),
label=rep("a", 9))
我继续在px
上绘制标签:
px + geom_text(data=df.text, aes(x=groups, y=0.1, label=label), size=4, col="red", stat="identity") +theme_bw()
看起来不太好
我的问题是在aes(y)
中定义一个geom_text
,该标签将标签绘制在固定位置(例如x轴上方或面板顶部),而不会移动y轴太多。使用以前的数据集,各组之间的y值相当均匀,因此我可以摆脱非常低的y值。但这一次y的范围相当大,因此不易实现。
因此,问题是如何在df.text中的facet_wrap
中的固定位置绘制标签,同时保持scale="free"
。最好在顶部panel.border上方。
答案 0 :(得分:2)
您可以定义一个新变量height
,该变量确定绘制标签的高度:
library(tidyverse)
df %>%
group_by(types) %>%
mutate(height = max(values) + .3 * sd(values)) %>%
left_join(df.text, by = "groups") %>%
ggplot(aes(groups, values)) +
facet_wrap(~types, scale = "free") +
geom_point() +
geom_text(aes(x = groups, y = height, label = label), size = 4, col = "red", stat = "identity") +
theme_bw()
在这里,我使用最大值加上标准偏差的0.3倍,但是您可以将其更改为您想要的任何值。不过,不确定如何在面板条的顶部放置标签。