美文网首页此地古同
R小姐:让数据抖动起来

R小姐:让数据抖动起来

作者: 鲨瓜 | 来源:发表于2018-11-05 22:12 被阅读0次

    在绘制散点图时,我们有时会遇到数据量过大的麻烦。尤其在这个万物皆数据的时代。

    由于数据量太大,而数据与数据之间的间隙又太小,使得数据之间相互层叠掩盖,这样就很难看出我们究竟有多少数据,以及数据之间的关系又是怎样的?

    当然,我们可以通过改变数据点的大小来减少数据之间的层叠掩盖,但这样无疑使辨别哪个数据点的难度增加。

    本文将介绍三种常用的方法解决数据量太大的问题:

    • 利用 alpha 改变数据的透明度

    • 利用矩形分割数据或者利用正六边形分割数据

    • 利用箱图

    1/2/3针对连续型数据,4针对离散型数据

    1

    原始数据展示

    首先引入今天需要使用的包,ggplot2 和 gcookbook 就不做介绍了,ggplot2 将两张图整合到一起太麻烦,于是就利用 cowplot 将两张图整合到一起。hexbin 是用来画箱图的。

    library(ggplot2)
    library(gcookbook)
    library(cowplot)
    library(hexbin)
    

    今天用的数据是钻石,家里有矿,共53940颗。

    image

    建立一个 p 对象,下文一直沿用。观察最最原始的数据集,可以看到数据与数据之间纷繁复杂的关系,相互层叠掩盖,看不出什么有价值的信息。

    p <- ggplot(data = diamonds,aes(x=carat,y=price))
    p1 <- p + geom_point() 
    p1
    
    image

    2

    半透明处理

    针对上面的问题,我们首先利用第一种方法,更改数据点的透明度。

    由于数据之间存在交叉层叠,交叉层叠越严重的区域数据点越多,颜色也就越深。这样我们就能初步判断出钻石品质的分布情况了。

    本文将透明度分别设置为 0.1 和 0.01 。大家可以根据实际情况更改,直到出现符合预期的图像为止。plot_grid()将两张图整合到一起。

    p2 <- p + geom_point(alpha=0.1)
    p3 <- p + geom_point(alpha=0.01)
    plot_grid(p2,p3,labels = c('p2','p3'))
    
    image

    由上图我们可以得出一些信息,图像左下方颜色比较深,表示数据点多,因此我们开采的钻石大部分品质较低,价格不是那么贵,高品质钻石很少。

    3

    几何图形分割

    图形分割的原理与改变透明度差不多,图形分割是将整个图形分成若干个区域。

    例如 bin=50 时,X轴分成50份,Y轴分成50份,这样X轴和Y轴内的区域就被分成2500个小矩形,每个矩形的数据点数是涂色的依据,矩形内的数据点越多,颜色越深。

    p4 <- p + stat_bin2d()
    p5 <- p + stat_bin2d(bins = 50) +
      scale_fill_gradient(low = 'lightblue',high = 'red',limits=c(0,6000))
    plot_grid(p4,p5,labels = c('p4','p5'))
    
    image

    与半透明处理的结论是一致的,但这样可能更直观一些。

    接下来看一下,正六边形分割的效果,正六边形的面积更大,包裹的数据点更多。

    p6 <- p + stat_binhex() +
      scale_fill_gradient(low = 'lightblue',high = 'red',
                          limits=c(0,8000),
                          guide = guide_legend())
    p7 <- p + stat_binhex() +
      scale_fill_gradient(low = 'lightblue',high = 'red',
                          breaks=c(0,250,500,1000,2000,4000,6000),
                          limits=c(0,6000),
                          guide = guide_legend()) 
    plot_grid(p6,p7,labels = c('p6','p7'))
    
    image

    还不错,挺好看的。

    4

    箱图

    除了上边的比较连续的数据,我们有时也会处理一些离散型数据。离散型数据的特征是一行一行的掩盖,或者是一列一列的掩盖。

    image

    针对这个特点,我们可以让数据抖一抖,使他们彼此分开。抖动 jitter

    sp1未处理,sp2是默认抖动,sp3自定义抖动

    sp1 <- sp + geom_point()
    sp2 <- sp + geom_point(position = 'jitter')
    sp3 <- sp + geom_point(position = position_jitter(width = .5,height = 0))
    plot_grid(sp1,sp2,sp3,labels = c('sp1','sp2','sp3'),ncol = 3)
    
    image

    有图有真相,离散型数据 sp1数据之间掩盖,sp2、sp3分离效果还可以。

    我们也可以利用箱图。

    box1 <- sp + geom_boxplot()
    box2 <- sp + geom_boxplot(aes(group=Time))
    plot_grid(box1,box2,labels = c('box1','box2'))
    
    image

    box1没有指定分组依据,所以将所有点都算到一块了,box2中我们指定分组依据Time,效果马上就显现了。

    箱图能向我们展示了哪些信息呢?有点累了,下次再详细说吧!


    由于文章篇幅有限,很多函数的具体功能及参数没办法向大家详细介绍。建议大家多多看英文官方文档,自行理解。

    下期再见。

    你可能还想看

    等你很久啦,长按加入古同社区

    image

    相关文章

      网友评论

        本文标题:R小姐:让数据抖动起来

        本文链接:https://www.haomeiwen.com/subject/subexqtx.html