2015-12-09 2 views
1

Я пытаюсь получить два распределения на одном графике с функцией googlevis gvisAreaChart, но она не работает, как я хочу:Два распределения в с googleVis в R

library(googleVis) 
df <- data.frame(a=rnorm(n = 400,mean = .1,sd = .01),b=rnorm(n = 400,mean = .13,sd = .01)) 
dfplot <- rbind(data.frame(x=density(df$a)$x,y=density(df$a)$y,var=rep("a",512)),data.frame(x=density(df$b)$x,y=density(df$b)$y,var=rep("b",512))) 
plot(gvisAreaChart(dfplot,xvar = 'x',yvar='y')) 

Я хотел бы дать два распределения разные цвета, а также когда они перекрываются. Я знаю, что это возможно в ggplot, но я ищу решение с googleVis, потому что оно лучше работает с Shiny.

Спасибо.

EDIT: Нашел очень громоздким обходной путь:

dfplot <- data.table(x=seq(0,by = .001)) 
df <- data.table(a=rnorm(n = 400,mean = .1,sd = .01),b=rnorm(n = 400,mean = .13,sd = .01)) 
dfa <- data.table(x=round(density(df$a)$x,3),y1=density(df$a)$y,var=rep("a",512)) 
dfb <- data.table(x=round(density(df$b)$x,3),y2=density(df$b)$y,var=rep("b",512)) 

dfa[duplicated(x),test:=TRUE];dfa<-dfa[is.na(test)] 
dfb[duplicated(x),test:=TRUE];dfb<-dfb[is.na(test)] 

setkey(dfplot,x);setkey(dfa,x);setkey(dfb,x) 
merge <- merge(dfplot,dfa,all.x=T,all.y=F,allow.cartesian=T) 
merge <- merge(merge,dfb,all.x=T,all.y=F,allow.cartesian=T) 

merge <- merge[,max:=pmax(y1,y2,na.rm=T)] 
merge <- merge[!is.na(max)] 
merge<-subset(merge,select = c('x','y1','y2')) 

plot(gvisAreaChart(merge,xvar = 'x',yvar=c('y1','y2'))) 

ответ

1

, к сожалению, я не знаком с googleVis, но, надеюсь, вы можете принять решение с rCharts

rm(list = ls()) 
library(shiny) 
library(rCharts) 

df <- data.frame(a=rnorm(n = 400,mean = .1,sd = .01),b=rnorm(n = 400,mean = .13,sd = .01)) 
dfplot <- rbind(data.frame(x=density(df$a)$x,y=density(df$a)$y,var=rep("a",512)),data.frame(x=density(df$b)$x,y=density(df$b)$y,var=rep("b",512))) 
hPlot(x = "x", y = "y", group = "var", data = dfplot, type = "area") 

enter image description here

+1

Великий, также выглядит очень хорошо. И интерактивно, как 'googleVis'. –