R ggplot箱线图改变颜色和填充

标签 r ggplot2 colors boxplot

我有一个数据集,其中有两组进行了测试和重新测试测量。我创建了一个图形,显示四个箱线图(组 x 测试)以及每个测量的点。每个科目的测试和重新测试分数通过一条线连接,箱线图根据测试或重新测试 session 进行着色。

现在我想根据组填充或取消填充箱线图。我通过切换下面代码中的 geom_boxplot 选项来创建两个图形(填充和未填充),然后在 Photoshop 中合并它们,从而创建了下图。但是,我想知道是否有办法完全用 ggplot 创建这个图形?

enter image description here

library(ggplot2)

group <- c("HC","HC","HC","HC","HC","HC","HC","HC","HC","HC","HC","HC","HC","HC","PAT","PAT","PAT","PAT","PAT","PAT","PAT","PAT","PAT","PAT")
session <- c("test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest","test","retest")
value <- c(2,1.998521753,1.874733659,1.718486493,1.623289857,1.546827187,1.423472302,1.391178972,1.706069109,1.633178623,1.55107172,1.529644866,1.85152853,1.955804538,1.642797713,1.618263891,1.332975483,1.191228234,1.314644375,1.18511437,1.881207152,1.764699552,1,1.001585308)
index <- c(1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12)
df <- data.frame(group, session, value, index, U = interaction(session,group))

p <- ggplot(df, aes(x=U, y=value))
p <- p + geom_boxplot(aes(fill=session), data=df, colour="black", outlier.alpha=0.0, lwd=0.8, alpha=0.94)
# p <- p + geom_boxplot(aes(colour=session), data=df, outlier.alpha=0.0, lwd=0.8)

dat <- ggplot_build(p)$data[[1]]
p <- p + geom_segment(data=dat, aes(x=xmin, xend=xmax, y=middle, yend=middle), colour="grey70", size=1.6)
p <- p + stat_summary(fun.y=mean,geom="point",pch="-",colour="grey30",size=8, position = position_dodge(width=0.75))
p <- p + geom_line(aes(group = index), alpha = 0.7, colour ="grey50", data=df)
p <- p + geom_point(size=2, aes(group=session), colour="black", data=df, position = position_dodge(width=0.75))

p <- p + scale_x_discrete(labels=c("HC-test","HC-retest","PAT-test","PAT-retest"))
p <- p + scale_y_continuous(limits=c(0.9,2.1), breaks=c(1,1.5,2))
p <- p + scale_colour_manual(values=c("#bf812d","#35978f"))
p <- p + scale_fill_manual(values=c("#bf812d","#35978f")) 

p <- p + theme_bw()
p <- p + theme(
     axis.text.x = element_text(colour = "black"),
     axis.text.y = element_text(colour = "black"),
     axis.title.x = element_blank(),
     axis.title.y = element_text(colour = "black"),
     legend.position = "none",
     panel.border = element_rect(colour = "black", fill=NA, size=1)
     )
p <- p + labs(y=expression("Normalized Volume(mm)"^3))
ggsave("~/Desktop/test.pdf", width=5, height=4, units=c("in"), plot=p)

最佳答案

您可以尝试以不同的方式设置因子顺序。您还需要在 scale_xxx_manual 中指定足够数量的。我已经精简了示例,只包含方框,因为这是您的焦点问题。

df$session <- factor(df$session, levels = c("test", "retest"))
df$U = interaction(df$group, df$session, lex.order = TRUE)

ggplot(df, aes(x = U, y = value, fill = U, color = U)) +
  geom_boxplot() +
  scale_fill_manual(values = c("white", "white", "#bf812d", "#35978f"), guide = "none") +
  scale_color_manual(values = c("#bf812d", "#35978f", "black", "black"), guide = "none")

enter image description here

关于R ggplot箱线图改变颜色和填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51289565/

相关文章:

R difftime 输出根据输入格式而不同(as.character() 包装器与没有包装器)

r - 如何使用R精确匹配整个数据集中的两列值

r - 将英镑符号添加到 ggplot

java - java中的多彩多变的文本

javascript - 如何在随机十六进制颜色生成器上设置不变的透明度

r - 如何编辑 R 函数的源代码?

r - 使用 RSelenium 选择文本框

带有 Rcpp 和 CMake 的 R 包(Windows)

r - 每个点而不是单个数据点的散点图汇总统计数据(例如总和或平均值)

CSS - 如何为不同高度设置渐变色背景