【问题标题】:Creating a common legend between plots from sub-datasets在子数据集的图之间创建公共图例
【发布时间】:2017-01-04 07:06:36
【问题描述】:

我正在阅读 Hadley Wickham 的 ggplot2 book,并希望让 cmets 了解我对其中一个练习的解决方案:

第 6.5.1 节
练习一

以下代码创建了 mpg 数据集的两个图。修改代码,使图例和轴匹配,而不使用分面!

fwd <- subset(mpg, drv == "f")
rwd <- subset(mpg, drv == "r")
ggplot(fwd, aes(displ, hwy, colour = class)) + geom_point()
ggplot(rwd, aes(displ, hwy, colour = class)) + geom_point()

这是我的解决方案:

ggplot(fwd, aes(displ, hwy, colour = class)) +
  geom_point() +
  lims(x = c(0, 7), y = c(0, 45)) +
  geom_point(aes(colour = class), alpha = 0, data = mpg) +
  guides(colour = guide_legend(override.aes = list(alpha = 1)))

ggplot(rwd, aes(displ, hwy, colour = class)) +
  geom_point() +
  lims(x = c(0, 7), y = c(0, 45)) +
  geom_point(aes(colour = class), alpha = 0, data = mpg) +
  guides(colour = guide_legend(override.aes = list(alpha = 1)))

我觉得我的想法很聪明,但对于更大的数据集来说效率不高。有没有更直接的方法来解决这个问题?或者这就是演习的目的?

【问题讨论】:

  • 解决方案的问题:它会影响轴限制。它创造了不可见的点。这些使输出文件变得混乱,并且某些设备存在 alpha 透明度问题。从概念上讲,添加新数据以实现数据集的不同表示不能成为 ggplot2 中的解决方案。这样的解决方案不符合图形语法。

标签: r ggplot2


【解决方案1】:

只需使用drop = FALSE 即可保持所有因子水平。

mpg$class <- as.factor(mpg$class) # convert to factor
fwd <- subset(mpg, drv == "f")
rwd <- subset(mpg, drv == "r")
ggplot(fwd, aes(displ, hwy, colour = class)) + geom_point() + scale_colour_discrete(drop=FALSE)
ggplot(rwd, aes(displ, hwy, colour = class)) + geom_point() + scale_colour_discrete(drop=FALSE)

【讨论】:

  • 谢谢!我知道会有更直接的方法。
猜你喜欢
  • 1970-01-01
  • 2014-12-29
  • 2016-10-11
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多