问题描述
我正在尝试可视化某些东西,目前看起来与此类似:
library(ggplot2)
library(ggpubr)
head(ToothGrowth)
ToothGrowth$dose <- as.factor(ToothGrowth$dose)
# what I got:
p <- ggpaired(ToothGrowth,x="supp",y="len",fill="dose",line.color = "gray",line.size = 0.4)+
scale_fill_manual(name="Dosis",labels=c("0.5","1","2"),values = c("darkorange2","olivedrab","cadetblue4"))+ # <= these colours are fixed as used in all other graphs already
facet_grid(~dose)+
stat_compare_means(method = "t.test",paired = TRUE)
p
现在,我希望根据状态(变量'supp'),相同颜色的两个盒子的色调有所不同;例如与VC相比,OJ总是显得褪色。我知道调色板等等有很多选择,但是不幸的是,配色方案是固定的,因为它是在所有其他图中设置的,并与合著者共享以进行一致的设计。
# what I tried so far:
p1 <- p +
scale_alpha(name="supp",labels=c("OJ","VC"),range = c(0.5,1))
p1 # doesn't change anything
p2 <- p +
scale_fill_hue(name="supp",h.start = c(0.5))
p2 # overwrites existing scale_fill (and does not do a hue)
p3 <- ggpaired(ToothGrowth,hue="supp","cadetblue4"))+
facet_grid(~dose)+
stat_compare_means(method = "t.test",paired = TRUE)
p3 # 'hue =' doesn't change anything
p4 <- ggpaired(ToothGrowth,alpha="supp",paired = TRUE)
p4 # 'alpha =' doesn't change anything
此外,通常我会在普通的“ ggplot”命令中执行所有操作,但是由于需要这种成对比较,因此我认为我会陷入“ ggpaired”状态;还是我不?
有人对此有什么好主意吗? 预先感谢!
解决方法
您可以在ggplot中本地完成全部操作,只需要很多代码。您可以这样做:
ggplot(ToothGrowth,aes(supp,len,fill = dose,alpha = supp)) +
geom_boxplot() +
scale_fill_manual(name = "Dosis",labels = c("0.5","1","2"),values = c("darkorange2","olivedrab","cadetblue4")) +
scale_alpha_discrete(range = c(0.5,1),guide = guide_none()) +
geom_line(inherit.aes = FALSE,group = 0:59 %% 30),color = "gray75") +
geom_text(data = data.frame(
x = 1.5,y = 40,dose = c("0.5",pval = sapply(c("0.5",function(x) {
round(t.test(len ~ supp,data = ToothGrowth[ToothGrowth$dose == x,],paired = TRUE)$p.val,4)})),inherit.aes = FALSE,aes(x = 1.5,y = 40,label = paste("T test: p value =",pval)),check_overlap = TRUE) +
facet_grid(~dose) +
theme_classic() +
theme(legend.position = "top",strip.background = element_rect(fill = "gray95",size = 0.25))