查看原文
其他

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

2016-09-24 小魔方 数据小魔方

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


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


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




密度曲线图所使用的图层函数为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个,所以最后两个类别的线条色、填充色改成了默认。


魔方学院QQ群:


QQ群:

微信群:


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存