【问题标题】:plotting the whole data within each facet using facet_wrap and ggplot2使用 facet_wrap 和 ggplot2 在每个方面绘制整个数据
【发布时间】:2016-02-22 09:49:10
【问题描述】:

我正在尝试为每个数据集和facet_wrap 绘制折线图。我想要的是浅灰色、透明或其他的,所有数据集都在后台。

df <- data.frame(id=rep(letters[1:5], each=10),
                 x=seq(10),
                 y=runif(50))

ggplot(df, aes(x,y, group=id)) + 
  geom_line() + 
  facet_wrap(~ id)

这张图是我能走多远,但我也希望在每张图中还有所有其他缺失的 4 条线......无论如何我尝试使用facet_wrap,我只得到一个数据行。

我希望每个方面都是这样的。

ggplot(df, aes(x,y, group=id)) + 
  geom_line() + 
  geom_line(data=df[1:10,], aes(x,y, group=id), size=5)

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是另一种方法:

    首先添加一个与id相同的新列:

    df$id2 <- df$id
    

    然后在没有原始id列的df基础上再添加一个geom_line

    ggplot(df, aes(x,y, group=id)) + 
      geom_line(data=df[,2:4], aes(x=x, y=y, group=id2), colour="grey") +
      geom_line() + 
      facet_wrap(~ id)
    

    【讨论】:

    • 这太棒了!我真的没有想过以这种方式将新数据添加到 geom,并且尝试了太多“一条包含所有观察的所有信息的行”。
    • 我也比@Heroka 更喜欢这个解决方案。我仍然需要考虑一下为什么它可以很好地工作,但我认为这很容易解决我的问题......
    • 谢谢 :) 虽然我相信这里有很多同样有创意的方法。
    【解决方案2】:

    这是一种方法。它可能不适合更大的数据集,因为我们复制了数据number_of_facets-times。

    首先,我们进行一些数据整理以创建所需的数据帧。 df$obs_id

    #new data with unique ID's and 'true' facets
    df2 <- expand.grid(true_facet=unique(df$id), obs_id=1:nrow(df))
    
    #merge them
    dat <- merge(df,df2,by="obs_id",all=T)
    

    然后,我们创建一个定义“真实”多面变量的标志,并从前景中辨别背景。

    dat$col_flag <- dat$true_facet == dat$id
    

    现在,绘图很容易。我使用 geom_line 两次而不是刻度,因为这比尝试修复排序更容易(会导致黑色被绘制在灰色下方)。

    p1 <- ggplot(dat, aes(x=x,y=y, group=id))+
      geom_line(color="grey")+
      geom_line(dat=dat[dat$col_flag,],size=2,color="black")+
      facet_wrap(~true_facet)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-12
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多