当前位置 : 主页 > 手机开发 > 无线 >

使用ggplot2:使用缩放和移动的密度创建分面散点图

来源:互联网 收集:自由互联 发布时间:2021-06-10
我想使用facet_wrap将一些数据绘制为散点图,同时叠加一些信息,如线性回归和密度. 我设法做到了这一切,但密度值与我的分数不成比例,这是正常的事情,因为这些点很远.不过,我想缩放并移
我想使用facet_wrap将一些数据绘制为散点图,同时叠加一些信息,如线性回归和密度.
我设法做到了这一切,但密度值与我的分数不成比例,这是正常的事情,因为这些点很远.不过,我想缩放并移动我的密度曲线,使其清晰可见;我不关心它的真正价值,而是更关心它的形状.

这是我所拥有的夸张的最低工作范例:

set.seed(48151623)
mydf <- data.frame(x1=rnorm(mean=5,n=100),x2=rnorm(n=100,mean=10),x3=rnorm(n=100,mean=20,sd=3))
mydf$var <- mydf$x1 + mydf$x2 * mydf$x3 
mydf.wide  <- melt(mydf,id.vars='var',measure.vars=c(1:3))
ggplot(data=mydf.wide,aes(x=value,y=var)) +
  geom_point(colour='red') +
  geom_smooth(method='lm') +
  stat_density(aes(x=value,y=..scaled..),position='identity',geom='line') +
  facet_wrap(~variable,scale='free_x')

结果如下:

我想要的是这个丑陋的黑客:

stat_density(aes(x=value,y=..scaled..*100+200),position='identity',geom='line')

理想情况下,我会使用y = ..scaled .. * diff(range(value))min(value)但是当我这样做时,我得到一个错误,说找不到’value’.我怀疑问题与刻面有关,但我更愿意保持我的方面.

在这种情况下,如何缩放和移动密度曲线?

我建议制作两个图并将它们与grid.arrange结合起来:

p1 <- ggplot(data=mydf.wide,aes(x=value,y=var)) +
  geom_point(colour='red') +
  geom_smooth(method='lm') +
  facet_wrap(~variable,scale='free_x') +
  theme(axis.title.x=element_blank(),
        axis.text.x=element_blank(),
        axis.ticks.x=element_blank(),
        plot.margin =       unit(c(1, 1, 0, 0.5), "lines"))

p2 <- ggplot(data=mydf.wide,aes(x=value,y=var)) +
  stat_density(aes(x=value,y=..scaled..),position='identity',geom='line') +
  facet_wrap(~variable,scale='free_x') + 
  theme(strip.background=element_blank(),
        strip.text=element_blank(),
        plot.margin =       unit(c(-1, 1, 0.5, 0.35), "lines"))

library(gridExtra)
grid.arrange(p1, p2, heights = c(2,1))
网友评论