2

我想创建一个情节

  1. 使用部分数据创建包含facet_grid两列的基础图。
  2. 使用剩余部分数据并在现有构面之上绘制,但仅使用单列。

示例代码:

library(ggplot2)
library(gridExtra)

df2 <- data.frame(Class=rep(c('A','B','C'),each=20), 
                 Type=rep(rep(c('T1','T2'),each=10), 3),
                 X=rep(rep(1:10,each=2), 3),
                 Y=c(rep(seq(3,-3, length.out = 10),2), 
                    rep(seq(1,-4, length.out = 10),2), 
                    rep(seq(-2,-8, length.out = 10),2)))

g2 <- ggplot() + geom_line(data = df2 %>% filter(Class %in% c('B','C')),
                           aes(X,Y,color=Class, linetype=Type)) + 
  facet_grid(Type~Class)

g3 <- ggplot() + geom_line(data = df2 %>% filter(Class == 'A'), 
                           aes(X,Y,color=Class, linetype=Type)) + 
  facet_wrap(~Type)

grid.arrange(g2, g3)

输出图:

在此处输入图像描述

如何g3在情节中包含情节g2?生成的图应g3在两个方面包含两条线两次。

4

1 回答 1

2

我假设下面的情节是你要找的。

library(dplyr)
library(ggplot2)
df_1 <- filter(df2, Class %in% c('B','C')) %>% 
 dplyr::rename(Class_1 = Class)
df_2 <- filter(df2, Class == 'A') 

g2 <- ggplot() + 
 geom_line(data = df_1,
           aes(X, Y, color = Class_1, linetype = Type)) +
 geom_line(data = df_2,
           aes(X, Y, color = Class, linetype = Type)) +
 facet_grid(Type ~ Class_1)
g2

在此处输入图像描述

解释

对于这样的任务,我发现使用两个数据集会更好。由于该变量df2$class具有三个唯一值:和A,因此分面不会给您所需的图,因为您希望数据显示在相应的分面中。BCClass~Typedf2$Class == "A"

这就是我将变量重命名为的原因,Class因为该变量仅包含两个唯一值:和. 分面允许您将数据绘制在顶部而不被分面。df_1Class_1BCClass_1 ~ Typedf2$Class == "A"Class

编辑

根据下面的评论,这里是仅使用一个数据集的解决方案

g2 + geom_line(data = filter(df2, Class == 'A')[, -1], 
               aes(X, Y, linetype = Type, col = "A"))

类似/相同的问题:ggplot2:: Facetting plot with the same reference plot in all panel

于 2018-01-26T19:11:34.160 回答