Frage Wie zeigt man nur einen Teil der Fläche des polaren GGplots mit Facette?


Angenommen, es gibt einen Datensatz in Polarkoordinaten, der als Sektor dargestellt wird

library(ggplot2)
library(reshape2)
data <- melt(matrix(rnorm(1000), nrow = 20))
data$type <- 1:2
data$Var1 <- data$Var1*6 - 60

ggplot(data, aes(Var1, Var2)) + 
  geom_tile(aes(fill = value)) + 
  coord_polar(theta = "x", start = pi) + 
  scale_x_continuous(limits = c(-180, 180)) +
  facet_wrap(~type)

was die folgende Grafik ergibt: enter image description here

Wie können wir den unteren (leeren) Teil der Handlung entfernen, während wir keinen vollständigen Kreis bilden?


18
2018-03-14 07:09


Ursprung


Antworten:


Dies ist ein uneleganter Hack, den Sie aber verwenden können grid Funktionen, um den Bereich abzudecken, den Sie nicht möchten. Beispielsweise:

library(ggplot2)
library(reshape2)
library(grid)

data <- melt(matrix(rnorm(1000), nrow = 20))
data$type <- 1:2
data$Var1 <- data$Var1*6 - 60

p1 = ggplot(data, aes(Var1, Var2)) + 
  geom_tile(aes(fill = value)) + 
  coord_polar(theta = "x", start = pi) + 
  scale_x_continuous(limits = c(-180, 180)) +
  facet_wrap(~type)
g1 = ggplotGrob(p1)

grid.newpage()
pushViewport(viewport(height=1, width=1, clip="on"))
grid.draw(g1)
grid.rect(x=0,y=0,height=1, width=2, gp=gpar(col="white"))

Dies schneidet die untere Hälfte der Grafik ab (siehe unten). Es wäre schön, eine elegantere Herangehensweise zu finden, aber wenn das nicht gelingt, können Sie vielleicht mit der Platzierungs- und Zeichenfunktionen des Darstellungsbereichs experimentieren (ganz zu schweigen von der Position der Achsenbeschriftungen und der Legende), um etwas zu erreichen, was Sie wollen. enter image description here


11
2018-03-15 02:31