ggplot2 facets 设置绘图颜色

Posted

技术标签:

【中文标题】ggplot2 facets 设置绘图颜色【英文标题】:ggplot2 facets set plot colors 【发布时间】:2017-12-28 17:17:42 【问题描述】:

不确定标题是否恰当地解释了我的问题:使用 facet wraps,我有一个图是其他图的摘要,这导致该图在我绘制颜色的变量上具有更高的值。因此,所有其他图只显示(大部分)一种颜色:Example graph。

我希望着色更依赖于非汇总图,而我不太关心汇总图是否由于包含高值而最终仅显示一种颜色(尽管较低的值仍应显示适当的颜色)。感谢您的帮助。

示例代码:

library(gdata)
library(viridis)
library(ggplot2)
summary <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 15, max = 200))
dat2 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat3 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat4 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat <- combine(summary, dat2, dat3, dat4)

p <- ggplot(dat, aes(x = x, y = y)) +
geom_point(aes(color = z)) +
scale_color_viridis(option = "magma") +
theme(panel.background = element_rect(fill = "grey93"),
    strip.background = element_blank(),
    panel.grid = element_blank(),
    panel.border = element_rect(fill = NA, colour = "black", size = 0.5, linetype = "solid"))`

p1 <- p +  facet_wrap(~source)

【问题讨论】:

如果您只是将那些summary 行的z 的分数设置为0 可以吗?如果是这样,请在运行 ggplot() 代码之前运行此行:dat &lt;- mutate(dat, z = if_else(source == "summary", 0, z)) 很遗憾没有,因为这些值仍然是有趣的信息,虽然我预计大多数值会相当高,但有些可能会更低。 【参考方案1】:
summary <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 15, max = 200))
dat2 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat3 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat4 <- data.frame(x = 1:15, y = runif(15), z = runif(15, min = 0, max = 30))
dat <- combine(summary, dat2, dat3, dat4)
dat_ <- subset(dat, source != "summary")

cut_off <- 70 # adjust here where you want the cut-off of z values to be.
summary2 <- subset(dat, source == "summary" & z < cut_off) 

p <- ggplot(dat_, aes(x = x, y = y)) +
 geom_point(aes(color = z)) +
 geom_point(data = summary2, aes(col = z)) +
 scale_color_viridis(option = "magma") +
 theme(panel.background = element_rect(fill = "grey93"),
       strip.background = element_blank(),
       panel.grid = element_blank(),
       panel.border = element_rect(fill = NA, colour = "black", size = 0.5, linetype = "solid"))

p1 <- p +  facet_wrap(~source)

summary3 <- subset(dat, source == "summary" & z >= cut_off)
p1 + geom_point(data = summary3, col = "red") # adjust the color aesthetic of the highest summary graph points here.

所以您会看到,在汇总图中 z 值大于或等于 70 的汇总数据用“红色”着色,因此它们与绿色岩浆规模形成对比。 (用“白色”做实验,它也有很好的对比)。 z 值小于 70 的所有汇总数据观察值将遵循与汇总图中其他三个图表相同的色标。降低 cut_off 变量(当前设置为 70)以在 dat2、dat3 和 dat4 图中获得更多颜色。

这正是您一直在寻找的答案。

【讨论】:

不知道您可以在这样的分面包装上添加图表,并感谢学习它。但是,我仍然希望摘要图中任何可能较低的值都显示适当的比例颜色,所以这并不能完全解决我的问题。 我对原始答案进行了编辑。告诉我这是否有效,如果有效,您需要进行哪些调整(如果有)。 也不太好用。为了可比性,我需要一种特定的颜色来表示图表中的相同值,例如一个图中的 z = 30 应该与所有其他图中的 z = 30 具有相同的颜色。我最初使用的是 gridextra,但出于这个原因,我使用了 facet wrapping。感谢您的尝试! 尝试最新的编辑 - dat2、dat3 和 dat4 图表中的颜色更多。并且汇总数据中的所有最高值在汇总图中都是“红色”的,因此它们与绿色岩浆规模形成对比。降低 cut_off 变量以在 dat2、dat3 和 dat4 图表中获得更多颜色。 想出了一种更简洁的方法来完成您所做的事情,即只需将限制设置为scale_color_viridis,然后使用na.value = 将NA 值设置为所需的颜色。感谢您的帮助!

以上是关于ggplot2 facets 设置绘图颜色的主要内容,如果未能解决你的问题,请参考以下文章

在 ggplot2 中将 abline 添加到 facet_zoom

在 R 中自定义 facet_wrap 绘图标签?

ggplot2超详细讲解

R语言ggplot2可视化分面图(faceting): ggplot2可视化分面图(facet_wrap)并设置不同的分面使用不同的坐标轴数值范围以及不同的轴标签断点间隔breaks

图例中 geom_hline 的颜色不正确 [ggplot2]

如何更改使用 ggplot2 制作的绘图的背景颜色