2016-10-03 11 views
0

Ich habe ein Datenfeld von mehreren Spalten (sagen wir n) mit unterschiedlichen Bereich und einem Vektor der Länge n. Ich möchte unterschiedliche x-Achse für jede Variable unter jedem Boxplot angezeigt werden. Ich versuchte facet_grid und facet_wrap, aber es gibt gemeinsame X-Achse. Diese ist das, was ich versucht habe:Box Plot in R mit zusätzlichen Punkt

d <- data.frame(matrix(rnorm(10000), ncol = 20)) 

point_var <- rnorm(20) 
plot.data <- gather(d, variable, value) 
plot.data$test_data <- rep(point_var, each = nrow(d)) 

ggplot(plot.data, aes(x=variable, y=value)) + 
geom_boxplot() + 
geom_point(aes(x=factor(variable), y = test_data), color = "red") + 
coord_flip() + 
xlab("Variables") + 
theme(legend.position="none") 
+0

was ist die Frage? –

+0

Ich will verschiedene x-Achse für jede Plots – Rajan

+0

Vielleicht facet_wrap (~ yourvar, scales = 'free_x')? – lbusett

Antwort

1

Wenn Sie mit, die den Text der x-Achse über dem Grundstück leben kann, und mit der Reihenfolge der Graphen etwas verkorksten dies funktionieren könnte:

library(grid) 
p = ggplot(plot.data, aes(x = 0, y=value)) + 
    geom_boxplot() + 
    geom_point(aes(x = 0, y = test_data), color = "red") + 
    facet_wrap(~variable, scales = "free_y", switch = "y") + 
    xlab("Variables") + 
    theme(legend.position="none") + theme_bw() + theme(axis.text.x=element_blank()) 

    print(p, vp=viewport(angle=270, width = unit(.75, "npc"), height = unit(.75, "npc"))) 

Ich bin eigentlich nur Erstellen der Grafik ohne Covers Fliping, so dass scales = 'free_y' funktioniert, die Position der Streifen Etiketten, und dann die Grafik zu drehen.

Wenn Sie den Text oben Graph nicht mögen (was verständlich ist), würde ich in Betracht ziehen, eine Liste von einzelnen Plots zu erstellen und sie dann mit grid.arrange zusammenzusetzen.

HTH,

Lorenzo