2016-12-20 7 views
0

Я хочу удалить вторую строку граней из моего графика ниже, потому что нет данных для этой факторной комбинации.Удаление целого ряда граней комбинации неиспользуемых коэффициентов

library(ggplot2) 
library(grid) 
set.seed(5000) 

# generate first df 
df1 = data.frame(x=rep(rep(seq(2,8,2),4),6), 
       y=rep(rep(seq(2,8,2),each=4),6), 
       v1=c(rep("x1",32),rep("x2",64)), 
       v2=c(rep("y1",64),rep("y2",32)), 
       v3=rep(rep(c("t1","t2"),each=16),3), 
       v4=rbinom(96,1,0.5)) 

# generate second df 
df2 = data.frame(x=runif(20)*10, y=runif(20)*10, 
       v1=sample(c("x1","x2"),20,T)) 

# plot 
ggplot() + 
    geom_point(data=df1, aes(x=x, y=y, colour = factor(v4)), shape=15, size=5) + 
    scale_colour_manual(values = c(NA,"black")) + facet_grid(v1+v2~v3, drop = T) + 
    geom_point(data=df2, aes(x=x,y=y), shape=23 , colour="black", fill="white", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) 

Я пытался использовать идею из this пост ..

g=ggplotGrob(y) 
pos=which(g$layout$t==5 | g$layout$t==6) 
g$layout=g$layout[-c(pos),] 
g$grobs=g$grobs[-c(pos)] 
grid.newpage() 
grid.draw(g) 

..но получил это.

Как я устранить пробелы? Кроме того, есть ли прямое решение этого, без необходимости манипулировать гномами и т. Д.?

+2

не проще подмножества данных, а не построить эти панели в первую очередь? – baptiste

+0

@baptiste У моей DataFrame нет ничего лишнего, что я могу устранить. Итак, вы предлагаете, чтобы я делал отдельные графики и помещал их вместе с 'grid.arrange()' или что-то подобное? – zoneparser

ответ

2

Просто измените данные:

df2 <- rbind(cbind(df2, v2 = "y1"), 
      cbind(df2, v2 = "y2")) 
df2 <- df2[!(df2$v1 == "x1" & df2$v2 == "y2"),] 

# plot 
ggplot() + 
    geom_point(data=df1, aes(x=x, y=y, colour = factor(v4)), shape=15, size=5) + 
    scale_colour_manual(values = c(NA,"black")) + facet_grid(v1+v2~v3, drop = T) + 
    geom_point(data=df2, aes(x=x,y=y), shape=23 , colour="black", fill="white", size=4) + 
    coord_equal(ratio=1) + xlim(0, 10) + ylim(0, 10) 

resulting plot

+0

Это работает, но я понятия не имею, что происходит! Мне нужно обернуть его вокруг моего фактического набора данных. Спасибо @Roland. Быстрые мысли о том, как продлить его, если у меня есть «y1», «y2» и «y3»? – zoneparser

+0

Вычислено: 'df2 <- df2 [! ((Df2 $ v1 ==" x1 "& df2 $ v2 ==" y2 ") | (df2 $ v1 ==" x1 "& df2 $ v2 ==" y3 ")),] ' – zoneparser

 Смежные вопросы

  • Нет связанных вопросов^_^