ggplot2绘图疑问:如何让红色线条像黑色线条一样连接成闭合三角形
解决ggplot2中红色线条无法闭合的问题
问题原因
你当前的代码里,红色线条的geom_path()没有指定对应的x2和y2映射,它默认沿用了初始的x和y数据,所以并没有帮红色线条完成闭合;而黑色线条看起来闭合,只是因为重复调用了针对黑色数据的geom_line()和geom_path(),本质上这两个函数都不会自动闭合多边形,除非数据中包含回到起点的点。
解决方案
方案1:给红色的geom_path指定对应数据
直接为红色的geom_path()添加x2和y2的映射,让它沿着红色三角形的点路径绘制闭合线:
library(ggplot2) x <- c(0, 1, 0) y <- c(0, 0, 1) x2 <- c(0, 1, 0) + 1/2 y2 <- c(0, 0, 1) + 1/3 df = data.frame(x, y, x2, y2) g = ggplot(data = df, aes(x = x, y = y)) + geom_line() + geom_path() # 给红色的geom_path指定x2和y2 g = g + geom_line(aes(x=x2, y=y2), color = "red") + geom_path(aes(x=x2, y=y2), color = "red") g
方案2:重复起点数据实现闭合
把每个三角形的起点坐标添加到数据末尾,这样geom_line就能直接绘制闭合线条,无需额外调用geom_path:
library(ggplot2) # 黑色三角形:添加起点(0,0)到末尾 x <- c(0, 1, 0, 0) y <- c(0, 0, 1, 0) # 红色三角形:添加起点(0.5, 1/3)到末尾 x2 <- c(0, 1, 0, 0) + 1/2 y2 <- c(0, 0, 1, 0) + 1/3 df = data.frame(x, y, x2, y2) # 仅用geom_line即可绘制闭合线条 g = ggplot(data = df, aes(x = x, y = y)) + geom_line() g = g + geom_line(aes(x=x2, y=y2), color = "red") g
方案3:使用geom_polygon更直观
如果只是要绘制闭合的多边形边界,推荐用geom_polygon,只需设置fill=NA就能只显示边框,无需处理点的重复:
library(ggplot2) x <- c(0, 1, 0) y <- c(0, 0, 1) x2 <- c(0, 1, 0) + 1/2 y2 <- c(0, 0, 1) + 1/3 df = data.frame(x, y, x2, y2) g = ggplot(data = df) + geom_polygon(aes(x = x, y = y), fill = NA, color = "black") + geom_polygon(aes(x = x2, y = y2), fill = NA, color = "red") g
内容的提问来源于stack exchange,提问作者GSA
相关产品推荐
相关产品推荐

