ggplot中增加按y值着色的曲线宽度时如何避免出现锯齿波动
解决方案
问题成因
该锯齿问题是ggplot2原生geom_line的渲染逻辑导致的:当你将连续变量y映射给color参数时,geom_line会把每两个相邻数据点之间的线段作为独立元素单独着色,粗线条下不同颜色线段的接缝就会呈现明显的锯齿感。未映射color时整条线是同一个颜色,就不会有接缝问题;线条较细时接缝不明显,也很难观测到锯齿。
可用实现方案
方案1:使用ggforce包的geom_link2(推荐效果最好)
geom_link2支持相邻线段之间的颜色渐变,完全消除接缝锯齿:
# 首次使用先安装包:install.packages("ggforce") library(tidyverse) library(ggforce) df <- tibble(x = seq(-3, 2.99, by = .01)) df$y <- dnorm(df$x) ggplot(df, aes(x = x, y = y, color = y )) + geom_link2(size = 10, lineend = "round")
方案2:无需额外包,用密集点模拟粗线
示例数据x轴步长已经很小,用足够大的圆点拼接就可以得到平滑的彩色粗线,如果你的原始数据x轴步长较大,可以先做插值加密再使用该方法:
library(tidyverse) df <- tibble(x = seq(-3, 2.99, by = .01)) df$y <- dnorm(df$x) ggplot(df, aes(x = x, y = y, color = y )) + geom_point(size = 10, shape = 19)
内容的提问来源于stack exchange,提问作者Delete
相关产品推荐
相关产品推荐

