繁体   English   中英

ggplot 手动图例 scale_fill_manual 用于单独的颜色因子

[英]ggplot manual legend scale_fill_manual for separate color factors

我已经搜索了几个线程,但还没有找到解决方案。

我有一个带有 40 多个变量的 geom_bar plot。 我创建了一个单独的 df 来根据特定类别标记每个变量,并为该类别分配颜色。 在 40 多个变量中,plot 中包含 4 种颜色/类别。

我希望 plot 的图例显示类别的颜色,而不是单个变量。 我知道我可以通过在原始 df 中使用颜色/类别来实现这一点,但是,我希望能够在许多不同的项目中使用颜色/类别参考 df,并且避免总是必须在绘图 dfs 中添加列来标记类别和颜色。

这是一个示例,其中 df 是绘制的数据,df_cols 类似于我的类别/颜色 df。 理想情况下,图例将具有“A=red, B=Blue, C=orange”而不是变量名。

variable = c("abc", "def", "ghi", "jkl","mno", "pqr", "stu")
tag = c("A", "B", "C", "A","B", "A", "B")
colours = as.character(c("red", "blue", "orange", "red", "blue", "red", "blue"))

# Create colour reference df 
df_cols = data.frame(variable, tag, colors = as.character(colours))
cols = df_cols$colors
cols = as.character(cols)
names(cols) = as.character(names(cols))

# Plotting df
df = data.frame(variable, value=c(1:7))

ggplot(df)+
  geom_bar(aes(x=variable, y=value, fill=variable),stat = "identity")+
  scale_fill_manual(values = cols)

这是我正在制作的实际 plot 的副本: 在此处输入图像描述

我想这可能就是你所追求的。 我已经简化了您的代码,以利用“标签”作为离散变量来控制填充颜色。

library(ggplot2)


# Plotting df
df <- data.frame(variable = c("abc", "def", "ghi", "jkl","mno", "pqr", "stu"),
                 tag = c("A", "B", "C", "A","B", "A", "B"),
                 value = c(1:7))

当您在 y 轴上绘制值时,您可以将 geom 简化为专为这种情况设计的geom_col并避免调用stat

ggplot(df)+
  geom_col(aes(x = variable, y = value, fill = tag)) +
  scale_fill_discrete(breaks = c("A", "B", "C"),
                      values = c("red", "blue", "orange"),
                      labels  = c("red", "blue", "orange"),
                      name = "Colour")

reprex package (v0.3.0) 于 2020 年 5 月 20 日创建

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM