R语言可视化——密度曲线图及其美化!

今天跟大家分享关于密度曲线图及其美化技巧!

密度曲线图可能平时大家用的不多,不过其实没什么神秘,它的功能于直方图一样,都是用于表达连续型数值变量的分布形态。

案例还是使用之前的关于钻石的那个数据集。

密度曲线图所使用的图层函数为geom_density() ,而且函数内position参数位置类型与我们之前讲到的直方图、柱形图(条形图时一样的)。

ggplot(diamonds,aes(x=price))+geom_density()

里面的线条颜色是通过colour参数进行控制(一定要记好colour与fill两个颜色填充参数的区别,colour控制线条、点颜色、fill控制区域颜色,所以在散点图、曲线、折线图途中使用colour参数,在面积图、柱形图中使用fill参数)

ggplot(diamonds,aes(x=price))+geom_density(colour="steelblue")

当然密度曲线的函数中也允许出现分类变量:

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density()

上面说过colour控制点、线条颜色、fill控制区域颜色,但是密度曲线算是一个另类,仔细看上图你会发现,它不同于折线图,因为每条密度曲线都是一个闭合曲线,所以他是允许使用fill参数填充闭合区域的:

ggplot(diamonds,aes(x=price,fill=clarity,alpha = 1/10))+geom_density()

你会发现这样出来的图形除了密度曲线内部除了被填充颜色之外,整体形状与使用colour参数填充线条颜色是一样的。

现在继续让我们回忆一下,关于上一节中将直方图时,处理position时的场景,position主要有四个我们常用的参数:

identity(不做任何变换)、stack(堆积)、dodge(簇状)、fill(百分比堆积)

其实只要是geom开头的集合图层对象,都是适用这几个参数的,那么跟我我们的分析,以上密度曲线图默认的参数应该是identity,下面验证我们的猜想。

ggplot(diamonds,aes(x=price,fill=clarity,alpha = 1/10))+geom_density(position="identity")

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="identity")

果然不出我们所料,默认的带分类变量的密度曲线图确实是使用默认的identity参数。

那么我们依次尝试其他几种参数情况下的密度曲线图呈现何种效果:

堆积:(position="stack")

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position="stack")

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="stack")

堆积:(position="dodge")# 案例来说密度曲线做成簇状效果是不合适的,不过我还是想看下到底神马效果

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position=position_dodge(width =1000))

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position=position_dodge(width =1000))

大家可以看到使用dodge参数之后,R语言会有提示建议,密度曲线图中X轴必须是无重复间隔刻度的数据,而此处的概率密度曲线无法满足这个要求:

那么最后一个位置参数是position=fill (堆积百分比)

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position="fill")

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="fill")

关于概率密度曲线的分面表达:

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position="fill")+facet_grid(.~clarity)

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="fill")+facet_grid(.~clarity)

通过图形效果我们可以看到,概率密度曲线的分面表达式是没有实际意义的,因为单独一个序列中只有一个类别,那么它的占比自然就是百分之百。

通过套用主题及配色模板,我们可以对密度曲线图进行适当美化:

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position="fill")+theme_wsj()+scale_fill_wsj()+guides(fill=guide_legend(title=NULL))

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="fill")+theme_wsj()+scale_colour_wsj()+guides(colour=guide_legend(title=NULL))

ggplot(diamonds,aes(x=price,fill=clarity))+geom_density(position="stack")+theme_wsj()+scale_fill_wsj()+guides(fill=guide_legend(title=NULL))

ggplot(diamonds,aes(x=price,colour=clarity))+geom_density(position="stack")+theme_wsj()+scale_colour_wsj()+guides(colour=guide_legend(title=NULL))

因为套用的配色模板中颜色数量上限是6个,而我们的分类变量类别有8个,所以最后两个类别的线条色、填充色改成了默认。

原文发布于微信公众号 - 数据小魔方(datamofang)

原文发表时间:2016-09-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏清墨_iOS分享

OpenGL ES-3D图形变换知识

1612
来自专栏人工智能的秘密

算法教程:能够体现文本语义关系的关键词提取算法

关键词提取能让我们快速地了解一篇文章。在信息爆炸的时代,能够有效提取文本的关键词,对于快速、及时、高效地获取信息是非常有帮助的。本文介绍一种能够体现文本语义关系...

3560
来自专栏ATYUN订阅号

只使用Numpy手动实现多层卷积神经网络(详解)

AiTechYun 编辑:yuxiangyu 在过去,我曾写过一篇关于“理解在最大池化层和转置卷积的反向传播”的文章。现在我想要使用这些知识做一个多层(或者说多...

3708
来自专栏机器学习之旅

应用:多算法识别撞库刷券等异常用户

在运营业务中,绝大多数公司会面临恶意注册,恶意刷接口,恶意刷券等流量问题,此类问题的常规解决方案都是拍定单位时间内的ip访问上限次数、qps上限次数等等,会存在...

1272
来自专栏AI派

如何使用sklearn加载和下载机器学习数据集

sklearn 中提供了很多常用(或高级)的模型和算法,但是真正决定一个模型效果的最后还是取决于训练(喂养)模型时所用的数据。sklearn 中的 sklear...

7355
来自专栏语言、知识与人工智能

基于段落检索的无监督阅读理解介绍

3672
来自专栏ATYUN订阅号

解决多标签分类问题(包括案例研究)

由于某些原因,回归和分类问题总会引起机器学习领域的大部分关注。多标签分类在数据科学中是一个比较令人头疼的问题。在这篇文章中,我将给你一个直观的解释,说明什么是多...

7476
来自专栏python开发者

神经网络反向传播梯度计算数学原理

[神经网络]反向传播梯度计算数学原理 1 文章概述 本文通过一段来自于Pytorch官方的warm-up的例子:使用numpy来实现一个简单的神经网络。使用基本...

38013
来自专栏贾老师の博客

Reed-Solomon 编码算法

4642
来自专栏YoungGy

ISLR_t统计量

回顾 t分布的起源 t分布概述 inference for a mean inference for comparing two independent mea...

2615

扫码关注云+社区

领取腾讯云代金券