2016-08-14 7 views
1

machen habe ich die folgenden Datenrahmen:Wie facettierte Boxplots mit ggplot2

samples_i <- c("LAIV D0", "LAIV D3", "LAIV D7", "LAIV D0", "LAIV D3", "LAIV D7", 
"TIV D0", "TIV D3", "TIV D7", "TIV D0", "TIV D3", "TIV D7") 

irisTag_i <- structure(c(0, 0, 0, 11.2672863636364, 0, 0, 0, 0, 0, 0, 13.8881727272727, 
0, 0, 0), .Dim = c(2L, 7L), .Dimnames = list(c("HSP90B1", "DNAJB1" 
), c("Neutrophil", "Tcell", "Monocyte", "Bcell", "NKcell", "PlasmaCell", 
"DendriticCell"))) 


SPVsR_i <- structure(c(0.1620678925564, -0.0609851972808482, -0.101082695275552, 
0.184268723991321, -0.0899021067853178, -0.0943666172060028, 
0.178289177586651, -0.0823892768809311, -0.0958999007057199, 
0.0331377432233005, 0.00289013805790048, -0.036027881281201, 
-0.0531973808347148, 0.0213528550009522, 0.0318445258337625, 
0.0179790366380429, 0.00347902775389391, -0.0214580643919368, 
-0.0136820170970586, 0.0142833182813199, -0.000601301184261278, 
0.0109856660204762, -0.00528600624634141, -0.00569965977413478, 
-0.0760171167711921, 0.0344372228755224, 0.0415798938956697, 
-0.114239469843063, 0.0217218301803764, 0.0925176396626868, -0.113283279031257, 
0.0424936766667866, 0.07078960236447, -0.14127024964406, 0.0595080054464686, 
0.0817622441975909, -0.0100499090500894, 0.0131491664210288, 
-0.00309925737093941, 0.101206058442775, 0.0231964804556542, 
-0.124402538898429, 0.00411785437964246, 0.0405556634613935, 
-0.044673517841036, 0.0720705616752313, -0.00782701824901867, 
-0.0642435434262126, 0.0753224665976433, -0.0323083061719772, 
-0.0430141604256661, -0.0654080281579984, 0.0124273486220488, 
0.0529806795359496, -0.0519970799923912, 0.00818146905729871, 
0.0438156109350925, 0.0200682008260364, -0.0466408267852637, 
0.0265726259592274, -0.0390251373720762, -0.0115216989414941, 
0.0505468363135703, 0.0321298528741327, -0.0151866963239294, 
-0.0169431565502034, -0.0310600302048482, 0.00718748395053659, 
0.0238725462543116, -0.0216937374381297, -0.00559429498828404, 
0.0272880324264137, 0.0288166559498562, -0.0173984873138801, 
-0.0114181686359761, -0.0176892628883129, -0.0235673738231865, 
0.0412566367114994, -0.00794904064609583, -0.000656094604392996, 
0.00860513525048881, -0.0538196455977893, 0.0200107051556589, 
0.0338089404421304), .Dim = c(12L, 7L), .Dimnames = list(c("1", 
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"), c("Neutrophil", 
"Tcell", "Monocyte", "Bcell", "NKcell", "PlasmaCell", "DendriticCell" 
))) 

Und mit diesem Code

par(mfrow=c(2,3), mai=c(1,0.4,0.4,0.1), omi=rep(0,4)) 
    for (i in c(2:7)){ 
     # deliberately skip i=1 
     # so we 2 x 3 can fit in image 

     boxplot(SPVsR_i[,i]~as.factor(samples_i), outline=F, density=c(10,20,300), las=2, yaxt="n", col=c(brewer.pal(3,"Blues"), 
     brewer.pal(3, "Oranges")), density=c(10,20,300), at=c(1,2,3,5,6,7)) 
     title(colnames(irisTag_i)[i]) 
    } 

ich dieses Bild machen kann:

enter image description here

Wie benutze ich ggplot2, um ähnliche Ergebnisse zu erhalten?

habe ich versucht, dies aber nicht:

library(reshape2) 
library(ggplot2) 

nsamplesv <- cbind(SPVsR_i, samples_i,deparse.level=2) 
nsamplesv_df <- as.data.frame.matrix(nsamplesv) 
nsamplesv.m <- melt(nsamplesv_df,id.vars=c('samples_i')) 
colnames(nsamplesv.m) <- c("samples",'celltype','score') 

p <- ggplot(nsamplesv.m, aes(samples,score)) +geom_boxplot() +facet_wrap(~ celltype) 
p 

dieses Bild Produziert:

enter image description here

Ich weiß nicht speziell, wie Sie:

  • Befestigen Sie die y-Achse mit weniger Zecken und 3 Dezimalstellen.
  • Boxen werden nicht angezeigt. Jeder Rahmen sollte 6 Boxen haben.
  • Würde gerne die Boxen färben. Diejenigen mit LAIV als Blues und TIV als Gelb.
  • Drehen Sie die x-Achse um 180 Grad.

Antwort

2

Hier ist eine bessere Möglichkeit, Ihre Daten neu zu gestalten:

library(ggplot2) 
library(dplyr) 
library(tidyr) 
library(RColorBrewer) 

as_data_frame(SPVsR_i) %>% 
    bind_cols(data_frame(sample=samples_i)) %>% 
    gather(celltype, score, -sample) %>% 
    mutate(celltype=factor(celltype, levels=unique(celltype))) %>% 
    filter(!(celltype %in% c("Neutrophil"))) -> df 

ggplot2 erfordert Mapping Ästhetik Datenrahmen oder zur Gewährleistung referenzierten Variablen sind von der gleichen Länge wie die Daten, die Sie verwenden.

Ich habe Ihre gewünschte Ausgabe hier nachgeahmt, aber bitte beachten Sie Ihre Betrachter und nicht, dass sie ihre Köpfe neigen, um die X-Achsen-Etiketten zu lesen. Boxplots sollten auch (IMO) große Y-Achsen-Linien haben, so dass es für menschliche Gehirne leichter ist, die Werte zu dekodieren. Es ist nicht 100% notwendig, aber (wieder) ist der Punkt, um beim Verstehen zu helfen.

Sie auch nicht die freie Y-Achse Skalen auf Ihrem Grundstück und ich nicht hier, aber das ist auch ein bisschen Horror. Selbst mit den Tick-Labels auf der Y-Achse sollten Sie etwas tun, um sicherzustellen, dass die Leute nicht versuchen, über verschiedene Zelltypen mit exakt denselben Skalen zu vergleichen (was sie standardmäßig/automatisch tun, wenn sie das Diagramm dekodieren, aber die zusätzliche Beschriftung) wird einen zusätzlichen Verarbeitungsschritt erzwingen, vorausgesetzt, die Leute lesen die Anleitung).

p <- ggplot(df, aes(sample, score)) 
p <- p + geom_boxplot(aes(fill=sample)) 
p <- p + scale_fill_manual(values=c(brewer.pal(3,"Blues"), brewer.pal(3,"Oranges"))) 
p <- p + facet_wrap(~celltype, scales="free") 
p <- p + labs(x=NULL, y=NULL) 
p <- p + theme_bw(base_size=10) 
p <- p + theme(strip.background=element_blank()) 
p <- p + theme(strip.text=element_text(face="bold")) 
p <- p + theme(axis.text.x=element_text(angle=90, vjust=0.5)) 
p <- p + theme(panel.grid.major.x=element_blank()) 
p <- p + theme(panel.grid.major.y=element_blank()) 
p <- p + theme(panel.grid.minor.y=element_blank()) 
p <- p + theme(panel.margin=margin(20,20,20,20)) 
p <- p + theme(plot.margin=margin(20,20,20,20)) 
p <- p + theme(legend.position="none") 
p 

enter image description here

Verwandte Themen