前言
ggplot2做为R语言中画图的包,我想大家应该都不陌生,这个包可以解决大部分的画图需求。说到绘图,有时候为了方便了解数据的分布,我们需要在图上添加垂直参考线以示区分。可能大家会觉得用ggplot2添加垂直参考线不是很容易的么,只需要用geom_vline函数就可以了。没错,用这个函数确实可以很省事的添加参考线,但是这个参考线会很长。那么,如果想添加的参考刚好跟概率密度曲线和x轴相交却不出头,那不是看起来更完美么?下面我们就来说说这个是怎么回事。
先来看一下我们到底要干什么吧,不然,可能说了半天都不知道我们要做什么,看一眼下面这两张图,同样都添加了参考线,左边是用geom_vline函数添加的参考线,风格比较常规;右边是用我的方式添加的参考线,上下刚好与概率密度和x轴相交并不出头。
对于这两种参考线,你更喜欢哪一种添加参考线的风格呢?如果你喜欢我的方式那就继续放下看。
示例代码
library(ggplot2)
df <- data.frame(x=rnorm(1000,0,1))
p <- ggplot(df,aes(x=x))+geom_density(fill='red',alpha=0.2)
pdata <- ggplot_build(p)$data[[1]]
idx <- match(min(abs(pdata$x-(-1.5))),abs(pdata$x-(-1.5)))
yvalue <- pdata[idx,'y']
p+geom_segment(aes(x = -1.5, y = 0, xend = -1.5, yend = yvalue),color="red",size=0.35,linetype="dashed")
效果如下:
上面的代码在x=-1.5(此处x的值只是约等于-1.5,原因大家想一下就应该明白了,就不再缀诉了)处添加了一个垂直参考线,而这个参考线可以恰到好处地与概率曲线和x轴相交。这种方式的思路大家看完代码也许应该就已已经知道了。我们这里采用方式是先用ggplot做统计,接着用统计后的数据获得参考线的坐标,最后根据坐标在图中添加适宜的参考线。
最后
对于这个小小的需求,不知道大家有咩有更方便的实现方法呢?如果有的话,大家可以分享给我一下。