2017-05-03 6 views
1

Ich versuche, eine (gruppiert) Dichteplot mit Signifikanztest zu erzeugen Ich habe es mit Boxplots (mit ggsignif Pakete), aber ich weiß nicht, wie in DensityPlotggplot2: Wie fügt man dem Dichtediagramm einen Signifikanzbalken hinzu?

setwd("~/myData") 

data<-read.delim("genes.txt", head=T, row.names = 1) 
data$Variance<-apply(data, 1, var) 

head(data) 
dim(data) 

library(ggplot2) 

library(ggsignif) 

ggplot(data, aes(x=variance, col=type)) +geom_density()) 
geom_signif(comparisons = list(c("normal", "traited")),map_signif_level=TRUE) 

ich habe diesen Fehler zu tun:

error in f(...) 
can oly handle data with groupes that are plotted on the x-axis 

enter image description here

+1

Willkommen bei SO. Bitte teilen Sie einige Daten und Code, um Ihr Problem reproduzierbar zu machen: http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – scoa

+1

Oh, ich sah nur Sie die Frage erweitert - meine Antwort ist jetzt ein wenig aus, da ich nicht wusste, dass Sie 'ggsignif' verwenden wollten - was übrigens schön ist, darüber zu lernen! – CMichael

+0

Die Fehlerleiste und die Vignette von 'ggsignif' scheinen jedoch darauf hinzuweisen, dass sie noch nicht auf Nicht-Balken-Diagrammen funktioniert. Sie sind also potentiell in meiner Lösung verstrickt. – CMichael

Antwort

0

Wie in den Kommentaren geschrieben ich denke, Art der Bar gibt es noch nicht in ggsignif implementiert ist. Hier ein manueller Workaround mit einigen manuellen Voreinstellungen (Mittelwerte, P-Werte) und Nachbearbeitungen (um die vertikale Positionierung zu optimieren).

x = rnorm(10000,2) 
y = rnorm(10000,-1) 

require(ggplot2) 

df1=data.frame(val=x,type="x") 
df2=data.frame(val=y,type="y") 
df.complete = rbind(df1,df2) 

mean1 = mean(x) 
mean2 = mean(y) 
middle = (mean1 + mean2)/2 

pval = 0.001 #replace by appropriate p-value from test of choice 

g = ggplot(df.complete,aes(x=val,fill=type)) 
g = g + geom_density() 
g = g + ylim(0,0.5) #enlarge sufficiently to have some space 
g = g + geom_segment(aes(x=mean1,y=0.425,xend=mean1,yend=0.45)) #correct y and yend after visual inspection 
g = g + geom_segment(aes(x=mean2,y=0.425,xend=mean2,yend=0.45)) #correct y and yend after visual inspection 
g = g + geom_segment(aes(x=mean2,y=0.45,xend=mean1,yend=0.45)) #correct y and yend after visual inspection 
g = g + geom_text(aes(x=middle,y=0.47,label=pval),hjust="center") #correct y after visual inspection 
g 

http://www.r-fiddle.org/#/fiddle?id=NUxpKHlv&version=2

Verwandte Themen