R 在子数据集的绘图之间创建公共图例

R 在子数据集的绘图之间创建公共图例,r,ggplot2,R,Ggplot2,我正在阅读哈德利·维克汉姆的著作,并想就其中一个练习的解决方案征求意见: 第6.5.1节 练习1 以下代码创建mpg数据集的两个绘图。修改代码,使图例和轴匹配,而不使用镶嵌面 我觉得我的想法是明智的,但对于更大的数据集来说,它不会有效。有没有更直接的方法来解决这个问题?或者这就是练习的目的 只需使用drop=FALSE保持所有因子水平即可 mpg$class <- as.factor(mpg$class) # convert to factor fwd <- subset(mpg,

我正在阅读哈德利·维克汉姆的著作,并想就其中一个练习的解决方案征求意见:

第6.5.1节
练习1

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


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

只需使用
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)

mpg$解决方案的类问题:它会影响轴限制。它会创建不可见的点。这些文件会使输出文件变得杂乱无章,一些设备会出现alpha透明度问题。从概念上讲,添加新数据以实现数据集的不同表示不能是ggplot2中的解决方案。这样的解决方案不符合图形语法。谢谢!我知道会有更直接的事情发生。
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)))
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)