叠加两个指定断点的geom_contour图层时出现线型显示错误如何解决
问题原因
等高线断裂问题与插值方法无关,核心是在单个geom_contour的美学映射中直接通过ifelse对等高线数值做线型判断,破坏了等高线的连续分组逻辑,导致阈值附近的线段渲染衔接异常。
解决方案
无需调整插值逻辑,将不同线型的等高线拆分为两个独立图层分别绘制即可解决断裂问题,可复现代码如下:
不使用metR版本
library(ggplot2) v <- reshape2::melt(volcano) ggplot(v, aes(Var1, Var2)) + # 底层白色粗等高线 geom_contour(aes(z = value), color = "white", size = 1.25, breaks = seq(100, 190, 10)) + # <=130的黑色实线等高线 geom_contour(aes(z = value), color = "black", size = 0.45, breaks = seq(100, 130, 10), linetype = "solid") + # >130的黑色虚线等高线 geom_contour(aes(z = value), color = "black", size = 0.45, breaks = seq(140, 190, 10), linetype = "dashed", show.legend = FALSE)
使用metR添加等高线标签版本
library(ggplot2) library(metR) v <- reshape2::melt(volcano) ggplot(v, aes(Var1, Var2)) + geom_contour(aes(z = value), color = "white", size = 1.25, breaks = seq(100, 190, 10)) + geom_contour(aes(z = value), color = "black", size = 0.45, breaks = seq(100, 130, 10), linetype = "solid") + geom_contour(aes(z = value), color = "black", size = 0.45, breaks = seq(140, 190, 10), linetype = "dashed", show.legend = FALSE) + geom_text_contour(aes(z = value))
拆分图层后,每个图层内的等高线保持连续分组,不会因为线型映射的判断逻辑打断渲染流程,断裂问题会完全消失。
内容的提问来源于stack exchange,提问作者Zacharyj7
相关产品推荐
相关产品推荐

