首页 > 解决方案 > 在 ggplot barplot 中指定条形颜色

问题描述

我有一个 30 列的条形图。我想给前 19 个设置颜色,其余的为不同的颜色。(见下表)。 在此处输入图像描述

我试过制作颜色矢量。我指定了图表中列的名称;

AMR_antibiotics <- c("AMIK", "GEN", "AMC", "AMP", "IMI", "P.T4", "FAZ", "FOV", "POD", "TAZ", "LEX", "CHL", "ENRO", "MAR", "ORB", "PRA", "DOX", "TET", "SXT", "AMOX", "AMPIC", "OXA", "PEN", "CEZ", "CPZ", "CEQ", "K.C", "MAF", "PIR", "ERY")

然后我尝试使用以下代码分配颜色;

AMR_colours <- c(AMIK:SXT="steelblue", AMOX:ERY="coral3")

然后我最终会使用 scale_fill_manual (values = AMR_colours) 将 AMR_colours 添加到我的 ggplot 代码中

这没有奏效,是因为试图用上面的代码来做这件事是完全错误的吗?我认为这将是一种更简单的方法,而不必手动浏览每一列并重复相同的颜色?

如果这是完全错误的,任何朝着正确方向的轻推将不胜感激!:)

谢谢!

标签: rggplot2colors

解决方案


您将制作一个颜色矢量,并指定名称:

AMR_colours = c(rep("steelblue",19),rep("coral3",11))
names(AMR_colours) = AMR_antibiotics

为了显示:

df = data.frame(x=rep(AMR_antibiotics,3),
y=runif(3*length(AMR_antibiotics)),VAR=rep(1:3,each=length(AMR_antibiotics)))

df$x = factor(df$x,levels=AMR_antibiotics)

ggplot(df,aes(x=x,y=y,fill=x))+
geom_col()+
facet_wrap(~VAR,ncol=1)+
scale_fill_manual(values=AMR_colours)

在此处输入图像描述

如您所见,图例有点太长了,所以如果您想将它们总结为AMIK:SXT, 和AMOX:ERY,您可以尝试:

df$fill = ifelse(df$x %in% AMR_antibiotics[1:19],"AMIK:SXT","AMOX:ERY")
fill_two = c("AMIK:SXT"="steelblue", "AMOX:ERY"="coral3")
ggplot(df,aes(x=x,y=y,fill=fill))+
    geom_col()+
    facet_wrap(~VAR,ncol=1)+
    scale_fill_manual(values=fill_two)

推荐阅读