ggplot - 在图形顶部添加框
ggplot - add box on top of graph
我有以下数据和图表:
fixed <- as.data.frame(rep(0.125,8))
fixed[,2] <- c("1","2","3","4","5","6","7","8")
colnames(fixed) <- c("Percentage", "Test")
是否可以将均值作为单独的框添加到图表顶部?我不想共享相同的 y-axis,因为这可能会与标签混淆。
这是我正在寻找的示例。如果我也能把盒子的背景画得更暗就太好了,可以吗:
这是我的情节代码:
p <- ggplot(fixed,aes(x=Test ,y=Percentage,fill=Test))+
geom_boxplot()+
stat_summary(fun.data = function(y)
data.frame(y=0.6, label = paste(round(mean(y),2))), geom="text",size=3) +
geom_hline(yintercept=0.55, linetype="dashed", color = "black")+
theme(legend.position="none")+
scale_y_continuous(limits = c(0, 0.6),breaks=seq(0,0.6,0.1),
labels= c("0%","10%","20%","30%","40%","50%","Mean"))+
theme_bw()+
labs(title = "Title")+
xlab("Test")+
ylab("Percetage")+
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "grey90", colour = NA),
plot.background = element_rect(fill = "grey90", colour = NA),
legend.position="none",plot.title = element_text(size= 12, hjust=0.5),
plot.margin = unit(c(1,1,1,1), "cm"))+
scale_fill_manual(values=c("#00441b","#006d2c","#238b45","#41ab5d","#74c476",
"#a1d99b","#c7e9c0","#e5f5e0"))
p
fixed <- as.data.frame(rep(0.125, 8))
fixed[, 2] <- c("1", "2", "3", "4", "5", "6", "7", "8")
colnames(fixed) <- c("Percentage", "Test")
让我们向 ggplot2 构建中添加一些,呃,结构。而且,我们将把一些 data
和 aes()
直接移动到 stat_
s 和 geom_
s 这样我们就可以做盒子,呃,geom_rect()
注解。评论是 in/near 条显着的行:
ggplot() +
geom_boxplot(
data = fixed, aes(x = Test, y = Percentage, fill = Test)
) +
geom_rect( # HERE IS UR BOX
data = data.frame(),
aes(xmin = -Inf, xmax = Inf, ymin = 0.565, ymax = Inf),
size = 2.5, fill = "#00000000", color = "black"
) +
stat_summary(
data = fixed, aes(Test, Percentage),
fun.data = function(y) {
data.frame(
y = 0.6,
label = paste(round(mean(y), 2))
)
},
geom = "text", size = 3
) +
scale_y_continuous(
limits = c(0, 0.6), breaks = seq(0, 0.6, 0.1),
labels = c("0%", "10%", "20%", "30%", "40%", "50%", "Mean")
) +
scale_fill_manual(
values = c(
"#00441b", "#006d2c", "#238b45", "#41ab5d",
"#74c476", "#a1d99b", "#c7e9c0", "#e5f5e0"
)
) +
coord_cartesian(clip = "off") + # WE NEED TO TURN CLIPPING OFF
labs(
x = "Test", y = "Percentage", title = "Title"
) +
theme_bw() +
theme(
legend.position = "none", # YOU HAD THIS IN A SEPARATE theme(). IT PAYS TO HAVE A CODE STYLE
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "grey90", colour = NA),
plot.background = element_rect(fill = "grey90", colour = NA),
plot.title = element_text(size = 12, hjust = 0.5),
plot.margin = unit(c(1, 1, 1, 1), "cm"),
axis.text.y = element_text( # MAKE THE "Mean" BIG & BOLD
size = c(rep(10, 6), 20), face = c(rep("plain", 6), "bold")
)
)
我有以下数据和图表:
fixed <- as.data.frame(rep(0.125,8))
fixed[,2] <- c("1","2","3","4","5","6","7","8")
colnames(fixed) <- c("Percentage", "Test")
是否可以将均值作为单独的框添加到图表顶部?我不想共享相同的 y-axis,因为这可能会与标签混淆。
这是我正在寻找的示例。如果我也能把盒子的背景画得更暗就太好了,可以吗:
这是我的情节代码:
p <- ggplot(fixed,aes(x=Test ,y=Percentage,fill=Test))+
geom_boxplot()+
stat_summary(fun.data = function(y)
data.frame(y=0.6, label = paste(round(mean(y),2))), geom="text",size=3) +
geom_hline(yintercept=0.55, linetype="dashed", color = "black")+
theme(legend.position="none")+
scale_y_continuous(limits = c(0, 0.6),breaks=seq(0,0.6,0.1),
labels= c("0%","10%","20%","30%","40%","50%","Mean"))+
theme_bw()+
labs(title = "Title")+
xlab("Test")+
ylab("Percetage")+
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "grey90", colour = NA),
plot.background = element_rect(fill = "grey90", colour = NA),
legend.position="none",plot.title = element_text(size= 12, hjust=0.5),
plot.margin = unit(c(1,1,1,1), "cm"))+
scale_fill_manual(values=c("#00441b","#006d2c","#238b45","#41ab5d","#74c476",
"#a1d99b","#c7e9c0","#e5f5e0"))
p
fixed <- as.data.frame(rep(0.125, 8))
fixed[, 2] <- c("1", "2", "3", "4", "5", "6", "7", "8")
colnames(fixed) <- c("Percentage", "Test")
让我们向 ggplot2 构建中添加一些,呃,结构。而且,我们将把一些 data
和 aes()
直接移动到 stat_
s 和 geom_
s 这样我们就可以做盒子,呃,geom_rect()
注解。评论是 in/near 条显着的行:
ggplot() +
geom_boxplot(
data = fixed, aes(x = Test, y = Percentage, fill = Test)
) +
geom_rect( # HERE IS UR BOX
data = data.frame(),
aes(xmin = -Inf, xmax = Inf, ymin = 0.565, ymax = Inf),
size = 2.5, fill = "#00000000", color = "black"
) +
stat_summary(
data = fixed, aes(Test, Percentage),
fun.data = function(y) {
data.frame(
y = 0.6,
label = paste(round(mean(y), 2))
)
},
geom = "text", size = 3
) +
scale_y_continuous(
limits = c(0, 0.6), breaks = seq(0, 0.6, 0.1),
labels = c("0%", "10%", "20%", "30%", "40%", "50%", "Mean")
) +
scale_fill_manual(
values = c(
"#00441b", "#006d2c", "#238b45", "#41ab5d",
"#74c476", "#a1d99b", "#c7e9c0", "#e5f5e0"
)
) +
coord_cartesian(clip = "off") + # WE NEED TO TURN CLIPPING OFF
labs(
x = "Test", y = "Percentage", title = "Title"
) +
theme_bw() +
theme(
legend.position = "none", # YOU HAD THIS IN A SEPARATE theme(). IT PAYS TO HAVE A CODE STYLE
panel.grid.major = element_blank(),
panel.grid.minor = element_blank(),
panel.background = element_rect(fill = "grey90", colour = NA),
plot.background = element_rect(fill = "grey90", colour = NA),
plot.title = element_text(size = 12, hjust = 0.5),
plot.margin = unit(c(1, 1, 1, 1), "cm"),
axis.text.y = element_text( # MAKE THE "Mean" BIG & BOLD
size = c(rep(10, 6), 20), face = c(rep("plain", 6), "bold")
)
)