2016-12-20 2 views
0

Ich möchte die zweite Facettenreihe aus meinem Diagramm entfernen, da für diese Faktorkombination keine Daten vorliegen.Löschen einer ganzen Reihe von Facetten der nicht verwendeten Faktor-Level-Kombination

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) 

ich die Idee von this Post zu benutzen versucht ..

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) 

..aber diese bekam.

Wie kann ich den weißen Raum zu beseitigen? Gibt es auch eine einfache Lösung, ohne die Grobs usw. manipulieren zu müssen?

+2

ist es nicht einfacher, die Daten der Teilmenge und nicht diese Platten in erster Linie zeichnen? – baptiste

+0

@baptiste Mein Datenrahmen hat nichts extra, was ich eliminieren kann. Also schlägst du vor, dass ich separate Plots mache und sie mit 'grid.arrange()' oder etwas Ähnlichem zusammenfüge? – zoneparser

Antwort

2

ändern einfach die Daten:

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

Das funktioniert, aber ich habe keine Ahnung was passiert! Ich muss meinen Kopf für meinen aktuellen Datensatz umschließen. Danke @Roland. Irgendwelche schnellen Gedanken darüber, wie ich es erweitern könnte, wenn ich 'y1', 'y2' und 'y3' hätte? – zoneparser

+0

Ich habe es herausgefunden 'df2 <- df2 [! ((Df2 $ v1 ==" x1 "& df2 $ v2 ==" y2 ") | (df2 $ v1 ==" x1 "& df2 $ v2 ==" y3 ")),] ' – zoneparser

Verwandte Themen