ggplot2:方面的连续和离散比例

Posted

技术标签:

【中文标题】ggplot2:方面的连续和离散比例【英文标题】:ggplot2: continuous and discrete scale in facet 【发布时间】:2021-12-04 10:02:33 【问题描述】:

我正在尝试创建一个图,其中显示同一组点的两个度量,一个具有离散比例,一个具有连续比例。我想并排展示这些情节,并将它们融入各个方面会很棒。不幸的是,我不知道如何在一个方面使用一种色标,而在另一个方面使用不同的色标。

library(tidyverse)


disc <- tibble(x = rnorm(100), y = rnorm(100), color = sample(1:3, 100, replace = TRUE), model = "discrete")
cont <- tibble(x = rnorm(100), y = rnorm(100), color = rnorm(100, 10), model = "continuous")

# want this to be discrete
ggplot(disc, aes(x = x, y = y, color = factor(color))) + 
  geom_point() + scale_color_discrete()

# want this to be continuous
ggplot(cont, aes(x = x, y = y, color = color)) + 
  geom_point() + scale_color_viridis_c()

# This would be prettier!
bind_rows( disc, cont ) %>%
  ggplot(aes(x = x, y = y, color = color)) + 
  geom_point() + 
  facet_wrap(~model)

由reprex package 创建于 2021-10-16 (v2.0.0)

我意识到这可能超出了 facet 的预期用途。但我很难让地图以连贯的方式并排打印,我认为这可能是更可持续的捷径。

【问题讨论】:

这个问题:***.com/questions/3805029/… 类似,不过是 11 岁。 在原生 ggplot2 中实现多色标并不容易,有一些包支持它(ggnewscalegg4hxrelayer 是我想到的三个)。另一种方法是制作两个完全不同的图并使用patchwork 组合它们。 【参考方案1】:

刚刚在我的搜索中了解到ggnewscale,它似乎很容易! :

library(tidyverse)
library(ggnewscale)


disc <- tibble(x = rnorm(100), y = rnorm(100), color = sample(letters[1:3], 100, replace = TRUE), model = "discrete")
cont <- tibble(x = rnorm(100), y = rnorm(100), color = rnorm(100, 10), model = "continuous")

ggplot(mapping = aes(x = x, y = y)) + 
  geom_point(data = disc, aes(color = color)) + 
  scale_color_discrete("discrete") + 
  new_scale_color() + 
  geom_point(data = cont, aes(color = color)) + 
  scale_color_viridis_c("continuous") + 
  facet_wrap(~model)

由reprex package 创建于 2021-10-16 (v2.0.0)

【讨论】:

以上是关于ggplot2:方面的连续和离散比例的主要内容,如果未能解决你的问题,请参考以下文章

默认数据集示例 mtcars 和 ggplot2 中的“错误:提供给离散比例的连续值”

ggplot2多边形->错误:提供给连续比例的离散值

ggplot2 + geom_point + 与大小成比例的气泡(错误“离散值提供给连续比例”)

即使我使用数字,ggplot2中的离散值/连续比例误差

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

ggplot2 配色