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 用于单独的颜色因子的主要内容,如果未能解决你的问题,请参考以下文章