facet wrap的递归索引错误

时间:2014-05-28 19:21:24

标签: r ggplot2

我使用facet_wrap并排显示两个图形,并希望执行以下操作:

  1. 画一个正方形,但每个面上都有不同的正方形
  2. 绘制一条垂直线,但在每个方面的不同位置绘制一条垂直线
  3. 我用这个链接来完成#1,但我不能与#2结合使用

    ggplot2 - create different geom_path objects in facets

    我创建了以下数据框

    square1 = data.frame(x=c(.....),y=c(.....),z=a)
    square2 = data.frame(x=c(.....),y=c(.....),z=b)
    df1 = rbind(square1,square2) # 10*3 data frame that defines the dimensions of the squares to draw with z taking value of a or b
    df2 = data.frame(x=c(..),z=c(a,b)) # 2*2 data frame with z taking value of a or b
    

    以下代码设置了方面,一切正常:

    RE <- ggplot(data, aes())
    RE <- RE + geom_point(aes())
    RE <- RE + xlab() + ylab() + ggtitle()
    RE <- RE + coord_cartesian()
    RE <- RE + scale_colour_brewer()
    RE <- RE + theme_bw()
    RE <- facet_wrap(~ v1 + v2, ncol=2)
    

    但是运行此代码会导致以下错误:

    RE <- RE + geom_path(aes(x = x, y = y), data = df1)
    RE <- RE + geom_vline(aes(xintercept = x), data = df2)
    
      

    面板$ x_scales [[this_panel $ SCALE_X]]出错:递归索引   在第4级失败

    请注意,我可以运行一行或其他行代码,但不能同时运行。

1 个答案:

答案 0 :(得分:0)

您尚未提供任何数据,因此我按照您之前发布的模式创建了一些数据。请注意,数据框包含点和路径的xy坐标;变量facet告诉ggplot在哪个面板中绘制点和路径;和变量vline给出垂直线的位置(在v1面板中,vline截距在x = 2;在v2面板中,vline截距在x = 3)。

library(ggplot2)

square1 <- data.frame(x = c(1, 5, 5, 1, 1), 
               y = c(1, 1, 5, 5, 1), 
               facet = "v1", 
               vline = 2)
square2 <- data.frame(x = c(2, 4, 4, 2, 2), 
               y = c(2, 2, 4, 4, 2), 
               facet = "v2", 
               vline = 3)

df1 = rbind(square1,square2)
df1

ggplot(df1, aes(x, y)) + 
   geom_point(colour = "red", size = 5) +
   geom_path(colour = "red", size = 2) + 
   geom_vline(aes(xintercept = vline),colour = "blue", size = 2) +
   theme_bw() + 
   facet_wrap(~ facet, ncol=2) 

enter image description here