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个,所以最后两个类别的线条色、填充色改成了默认。
魔方学院QQ群:
QQ群:
微信群: