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

Posted

技术标签:

【中文标题】ggplot 手动图例 scale_fill_manual 用于单独的颜色因子【英文标题】:ggplot manual legend scale_fill_manual for separate color factors 【发布时间】:2020-09-06 04:17:32 【问题描述】:

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

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

我希望图表的图例显示类别的颜色,而不是单个变量。我知道我可以通过在原始 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)

这是我正在制作的实际情节的副本:

【问题讨论】:

你的描述让我有点困惑。你能模拟一个你想要达到的目标的例子吗? 【参考方案1】:

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

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-05-20 创建

【讨论】:

嗨,彼得,我用示例图的副本编辑了上面的问题。我试图避免在 ggplot 调用中输入所有变量名。我正在尝试找到一个解决方案,如果可能的话,我可以在其中使用包含所有指标、标签和颜色的单独 df。 我认为您不需要在ggplot 调用中输入所有变量名。重要的是将 fill = variable 更改为 fill = tag 参数。 是的,我刚刚看到您在示例中使用scale_fill_discrete() 完成了它,但您是对的,没有必要。我试图避免将列添加到额外的 df 并让所有内容都来自 df_cols 参考。

以上是关于ggplot 手动图例 scale_fill_manual 用于单独的颜色因子的主要内容,如果未能解决你的问题,请参考以下文章

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

基于轴颜色的ggplot图例

如何在ggplot2的图例中斜体化一个类别

ggplot2-图例篇

R语言ggplot2画横向直方图以及去掉图例

11.ggplot2——色阶与图例(二)