R ggplot boxplot:订单填充变量

R ggplot boxplot: order filling variable

我正在生成一些箱线图,每个箱线图对应一个不同的标记,由一个分类变量填充:'CR' 和 'No CR'。

我希望绘图中的左侧框为 'No CR'-填充,右侧框为 'CR'。喜欢这个:

然而,对于某些地块,我是相反的(左'CR'和右'No CR')

我如何控制(排序?)哪个填充类别是左,哪个是右?

这是我的部分代码:

head(df)

#      ID   y   CR
# 1     1    0  No CR
# 2     2    0  No CR
# 3     3    0  CR
# 4     4    4  No CR

ggplot(df, aes(x = CR, y = y)) +
                  geom_boxplot(aes(fill=CR)) +
                  labs(title="Highly differential peptides") + 
                  scale_fill_manual(values=c("#35978f","#D6604D"))+ 
                  stat_compare_means( label.y = maxadn,size=5)

很高兴包含一个 minimal, reproducible example,这样可以更轻松地彻底回答您的问题。首先我会模拟一些数据:

library("ggplot2")
df <- data.frame( 
    CR = sample(c("CR", "No CR"), 20, replace=TRUE), 
    y = rpois(20, 2) 
)

然后,如 this question 中所述,您可以直接设置限制:

ggplot(df, aes(x = CR, y = y)) + 
    geom_boxplot(aes(fill=CR)) + 
    scale_fill_manual(values=c("#35978f","#D6604D")) +  
    scale_x_discrete(limits=c("No CR", "CR")) 

或使用因子水平来控制顺序:

ggplot(df, aes(x = factor(CR, levels=c("No CR", "CR")), y = y)) + 
    geom_boxplot(aes(fill=CR)) + 
    scale_fill_manual(values=c("#35978f","#D6604D")) +  
    labs(x = "CR") 

没有任何重新排序:

ggplot(df, aes(x = CR, y = y)) + 
    geom_boxplot(aes(fill=CR)) + 
    scale_fill_manual(values=c("#35978f","#D6604D"))

您可以重新调整您的 CR 变量:

df$CR=factor(df$CR,levels=c("No CR","CR"))

然后尝试重新绘图