本文显示如何填充 图表中两条交叉线之间的区域。
让我们尝试用ggplot2绘制这个图 :
1. 将数据,数据相关绘图,数据无关绘图分离
这点可以说是ggplot2最为吸引人的一点。众所周知,数据可视化就是将我们从数据中探索的信息与图形要素对应起来的过程。
ggplot2将数据,数据到图形要素的映射,以及和数据无关的图形要素绘制分离,有点类似java的MVC框架思想。这让ggplot2的使用者能清楚分明的感受到一张数据分析图真正的组成部分,有针对性的进行开发,调整。
2. 图层式的开发逻辑
在ggplot2中,图形的绘制是一个个图层添加上去的。举个例子来说,我们首先决定探索一下身高与体重之间的关系;然后画了一个简单的散点图;然后决定最好区分性别,图中点的色彩对应于不同的性别;然后决定最好区分地区,拆成东中西三幅小图;最后决定加入回归直线,直观地看出趋势。这是一个层层推进的结构过程,在每一个推进中,都有额外的信息被加入进来。在使用ggplot2的过程中,上述的每一步都是一个图层,并能够叠加到上一步并可视化展示出来。
3. 各种图形要素的自由组合
由于ggplot2的图层式开发逻辑,我们可以自由组合各种图形要素,充分自由发挥想象力。
首先,加载 ggplot2 并生成要在示例中使用的数据框(我使用的是稍微修改过的数据集,因此最终结果会与原始图有所不同)。
在 ggplot2 中可以填充两条线之间的区域,但是由于我们需要线段具有不同的颜色,因此需要一些额外的工作。
> ggplot + geom_ribbon
为了改变两条线交叉点的填充颜色,需要计算交点。
slope1 <- c intcpt1 <- with intcpt2 <- with x2 <- with y3 <- with
现在,我们确保计算正确,我们目视检查交叉点的位置:
> ggplot+ geom_line + geom_line + geom_point
当我计划为上面使用 geom\_ribbon 生成的图着色时,交叉点也需要以 geom\_ribbon 的形式呈现——一个y3 复制变量就可以做到这一点。
y4 <- y3
显然还需要额外的错误检查,如上图最左边和最右边的绿点的位置所示——任何两条线都可以有一个交点,超出特定图的范围。
> cross\[which\] <- NA >segment <- findIntval
随时关注您喜欢的主题
为了使 ggplot2 能够在每个线条交叉处改变填充颜色,它需要知道每个彩色区域的起点和终点。因此需要复制中间的交叉点,因为它们将是两个相邻区域的一部分,填充了不同的颜色。
x3 <- c(tail, NA) y5 <- c(tail, NA) y6 <- y5
现在需要将两条线的坐标和彩色区域的起点/终点组合成一个长格式的数据帧。
> crs1 <- css > cs2 <- cr\[!is.na\] > co3 <- rss\[!is.na\]
> names(cos2) <- names > names(cos3) <- names > cmo <- rbind > omo <- rbind > ggplot(obo, aes) + geom_ribbon
每个区间都填充了不同的颜色,但我们希望将填充颜色的数量限制为两种。
> ggplot + geom_ribbon + geom_path + opts
可下载资源
关于作者
Kaizong Ye是拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。
本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。
非常感谢您阅读本文,如需帮助请联系我们!