2017-06-14 1 views
0

Ich habe eine Reihe von ggplot() s mit zwei Schichten: a geom_boxplot und und geom_points.R - gridExtra - einige Schicht von ggplot() skaliert nicht

Wenn ich Eingeben die in einem Raster gridExtra verwenden, die aber die geom_boxplot Skalen geom_point nicht der Fall, die hässlich (z.B. siehe Bild unten) in etwas führt.

Wie kann ich dieses Problem bitte beheben?

Reproduzierbare Code:

library(ggplot2) 
library(gridExtra) 
datablock <- data.frame(date = rep(1:10, 3) 
       , value = rnorm(30, 3,2) 
       , name = c(rep("one",10), rep("two",10), rep("three",10))) 
currentValues <- data.frame(date = rep(1,3) 
       , value = c(3, 2.3, 3.5) 
       , name = c("one","two", "three")) 
boxplotFg <- 
    ggplot(datablock, aes(x = name, y = value)) + geom_boxplot(outlier.shape=NA) + 
    geom_point(data=currentValues, aes(x=name, y=value, color = value), size = 8) 


grid.arrange(boxplotFg,boxplotFg, boxplotFg, boxplotFg,boxplotFg, boxplotFg, ncol = 3) 

Ausgang:

enter image description here

Ich könnte natürlich die Größe der geom_point s verringern, sagen wir, 4 oder 5 ... aber ich fühle mich wie die absolute Größe zu variieren ist nicht der richtige Weg, da es nur das Problem im Allgemeinen lösen wird.

+1

relative Größe der Punkte in ggplot2 Plots Controlling: https://stackoverflow.com/questions/3870303/controlling- relative-Größe-von-Punkten-in-ggplot2-Plots –

+1

@MarcoSandri es wird extrem schwierig sein, das Seitenverhältnis der Punkte mit dieser Methode zu kontrollieren. Insbesondere, da sich die relative Skalierung in den x- und y-Richtungen abhängig von der Größe der Grafikausgabe ändern muss, kann dies nicht einfach algorithmisch bestimmt werden. – dww

+0

Grid-Viewports sollen einige Vererbungseigenschaften bieten, um Grob-Größen relativ zum übergeordneten Kontext zu skalieren, aber AFAIK wurde nie wirklich systematisch verwendet/implementiert. Betrachten wir zum Beispiel 'print (qplot (1,1) + theme_bw (2), vp = Ansichtsfenster (gp = gpar (cex = 10)))' – baptiste

Antwort

0

Die einfachste Lösung ist vielleicht, die Punktgröße entsprechend der Anzahl der Gitterspalten zu skalieren.

nc = 3 
boxplotFg <- 
    ggplot(datablock, aes(x = name, y = value)) 
    geom_boxplot(outlier.shape=NA) + 
    geom_point(data=currentValues, aes(x=name, y=value, color = value), 
     size = 8/nc) 
grid.arrange(boxplotFg, boxplotFg, boxplotFg, boxplotFg,boxplotFg, boxplotFg, 
    ncol = nc) 

enter image description here

den gleichen Code, aber mit nc=2 ergibt

enter image description here

Verwandte Themen