r - 在 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 代码中
这没有奏效,是因为试图用上面的代码来做这件事是完全错误的吗?我认为这将是一种更简单的方法,而不必手动浏览每一列并重复相同的颜色?
如果这是完全错误的,任何朝着正确方向的轻推将不胜感激!:)
谢谢!
解决方案
您将制作一个颜色矢量,并指定名称:
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)
推荐阅读
- rust - 如何在我只有一个`syn::buffer::Cursor`的上下文中使用`syn::parse::Parse`(或更一般地说,`ParseBuffer`)?
- batch-file - dos批处理文件中的:PROMPT是什么意思?
- c# - 在 Windows 10 上具有多个虚拟桌面的 C# UI 自动化 API
- java - 在 aerospike 中第一次在 bin 中插入数据,然后是增量
- bash - 根据另一个字符串中的格式替换 var 中的字符串
- asp.net - MVC 转换为 Webp
- python - 对于选定数字的循环迭代(不使用范围)
- python - 如何从网页中分离一行抓取的数据以提高可读性
- node.js - 使用 nodejs 流式传输视频文件链
- c# - 在运行时加载证书时,如何确定私钥的 CSP/KSP 和密钥容器?