【问题标题】:how do I match color palettes in multiple ggplot2 graphs in R?如何匹配 R 中多个 ggplot2 图中的调色板?
【发布时间】:2013-12-17 02:50:42
【问题描述】:

这个问题已经有一段时间了,但我知道我很快就会提取新数据,我想弄清楚如何用这种技术绘制它。看起来 cmets and answers 中的人知道如何穿上它,但我无法完全弄清楚给我的东西。还有人想试试吗?

我正在尝试使用具有多个级别的因子变量绘制多个条形图。

首先,我生成一个 data.frame 并创建一个按数值降序排列的因子(以便绘图从最高移动到最低)。然后,我想生成一个 ggplot2 对象,在这种情况下可以是 gg1。这将自动为每个级别分配颜色并构建条形图。然后我创建 gg2,它本质上是相同的,但顺序不同。但是,ggplot2 根据val 的值自动分配颜色。我需要将颜色映射到字符串 name,以便在多个 ggplot 对象中重复使用。

简而言之,问题在于,在下面的示例中,只有轴刻度值发生了变化,而颜色也发生了变化。我尝试使用 here 方法无济于事。有什么想法吗?

library(ggplot2)
test1 <- data.frame(name = c('a', 'b', 'c'),
                    val = 1:3)
test1$name <- factor(test1$name,
                     levels = as.character(test1$name[order(-test1$val)]))
gg1 <- ggplot(data = test1) + geom_bar(aes(x = name, y = val, fill = val))
gg1
test2 <- data.frame(name = c('a', 'b', 'c'),
                    val = c(3, 1, 2))
test2$name <- factor(test2$name,
                     levels = as.character(test2$name[order(-test2$val)]))
gg2 <- ggplot(data = test2) + geom_bar(aes(x = name, y = val, fill = val))
gg2

这就是我尝试合并链接解决方案中建议的方法的方式:

g <- ggplot_build(gg1)
myPalette <- unique(g$data[[1]]["fill"])[, 1]
gg3 <- ggplot(data = test2) + geom_bar(aes(x = name, y = val, fill = val)) + 
       scale_fill_manual(values = myPalette)
gg3

【问题讨论】:

  • 您说“ggplot2 根据 val 的值自动分配颜色”,但在您的示例中,您通过指定 fill = val 手动将颜色设置为基于 val。我确实理解您的问题,即确保 a 在数据集中映射到相同的颜色,但目前您的示例代码并没有达到应有的效果。
  • 这是非常正确的,要么是措辞不佳,要么是我没有提供正确的代码。我在这里的代码只是我在更大数据集中采用的方法的一个简化示例。当我说“自动分配颜色”时,我想说它从默认的fill 调色板中为我挑选了实际的颜色映射;我没有提供我自己的调色板映射。我不太确定如何重新表述我的问题......
  • 只需设置刻度的限制,就像设置轴一样。
  • 设置限制有什么帮助?我认为这是values 的问题,而不是limit...

标签: r ggplot2


【解决方案1】:

试试这个

test2 <- data.frame(name = c('a', 'b', 'c'),
                    val = c(3, 1, 2,3,2,1,1,2,3))

为填充值添加标签

test2$val <- factor(test2$val,
                    levels = c(1,2,3),
                    labels = c("One", "Two","Three")) 
ggplot(data = test2) + geom_bar(aes(x = name,fill=val)) +
  scale_fill_manual(values = c('One' = "red", 'Two' = "orange", 'Three' = "blue"))

【讨论】:

  • 要在不同的图中使用颜色,您可以将值定义为变量
  • 嗯,我不确定这如何解决我的特定问题,尽管按照您的方式将 values 定义为文本可能是朝着正确方向迈出的一步。
猜你喜欢
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2014-01-23
  • 1970-01-01
  • 2021-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多