ggplot2绘制矩形时出现线条缺失等异常问题咨询
问题成因解答
1. 矩形上边线缺失的原因
核心原因是误用了geom_line()函数:geom_line()的默认逻辑是按x轴数值从小到大排序后再连接数据点,而非按照输入的坐标点顺序连线。
你给出的坐标点顺序为(0,0) → (1,0) → (1,1) → (0,1) → (0,0),geom_line()会先按x值对所有点重排:x=0的三个点(0,0)、(0,1)、(0,0)排在前面,x=1的两个点(1,0)、(1,1)排在后面,最终的连线顺序变为(0,0) → (0,1) → (0,0) → (1,0) → (1,1),自然不会出现(1,1) → (0,1)这段上边线。
2. 加随机扰动后结果异常的原因
添加随机扰动后,原本x值完全相同的点(x=0的三个点、x=1的两个点)的x值出现了微小差异,geom_line()按x排序后的点顺序完全被打乱,和预期的矩形顶点顺序完全不符,最终连出来的线条就会呈现混乱的异常形态。
解决方案
如果需要按照输入的坐标点顺序连线实现闭合矩形,直接将geom_line()替换为geom_path()即可,geom_path()不会对输入点做额外排序,严格按输入顺序连线:
library(ggplot2) x = c(0, 1, 1, 0, 0) y = c(0, 0, 1, 1, 0) ggplot(NULL, aes(x, y)) + geom_path()
如果需要绘制矩形,也可以直接使用专门的geom_rect()函数,不用手动拼接顶点坐标,代码更简洁。
内容的提问来源于stack exchange,提问作者Weiqiang Yang
相关产品推荐
相关产品推荐

