ggplot2中为内嵌放大图添加连接虚线的报错解决方法
问题解决
报错原因
你遇到的colour美学错误,是因为主图p1的全局美学映射(aes(color = subject))被geom_path继承了,但你给geom_path的新数据框里没有subject列,导致颜色映射的长度不匹配(数据有4行,但subject对应原数据的60行)。
解决方案
有两种方式解决这个问题,同时调整连接虚线的坐标,使其正确连接主图的放大区域和内嵌图:
方式1:明确指定geom_path的颜色
在geom_path中直接设置color='black',覆盖全局的颜色映射:
p1 + annotation_custom(ggplotGrob(p2), xmin = 120, xmax = 336, ymin = 4, ymax = 10) + # 内嵌图的边框 geom_rect(aes(xmin = 120, xmax = 336, ymin = 4, ymax = 10), color='black', linetype='dashed', alpha=0) + # 主图放大区域的边框 geom_rect(aes(xmin = 0, xmax = 24, ymin = 0, ymax = 5), color='black', linetype='dashed', alpha=0) + # 连接虚线:主图放大框右上角→内嵌图左上角;主图放大框右下角→内嵌图左下角 geom_path(aes(x, y, group=grp), data=data.frame(x = c(24, 120, 24, 120), y = c(5, 10, 0, 4), grp=c(1,1,2,2)), linetype='dashed', color='black')
方式2:禁用全局美学继承
给geom_path添加inherit.aes=FALSE,这样就不会继承主图的color=subject等映射:
p1 + annotation_custom(ggplotGrob(p2), xmin = 120, xmax = 336, ymin = 4, ymax = 10) + geom_rect(aes(xmin = 120, xmax = 336, ymin = 4, ymax = 10), color='black', linetype='dashed', alpha=0) + geom_rect(aes(xmin = 0, xmax = 24, ymin = 0, ymax = 5), color='black', linetype='dashed', alpha=0) + geom_path(aes(x, y, group=grp), data=data.frame(x = c(24, 120, 24, 120), y = c(5, 10, 0, 4), grp=c(1,1,2,2)), linetype='dashed', color='black', inherit.aes=FALSE)
坐标说明
主图的放大区域是xmin=0, xmax=24, ymin=0, ymax=5,内嵌图的位置是xmin=120, xmax=336, ymin=4, ymax=10。代码中设置的连接点是:
- 主图放大框的右上角
(24,5)→ 内嵌图的左上角(120,10) - 主图放大框的右下角
(24,0)→ 内嵌图的左下角(120,4)
你可以根据需要调整这些坐标,实现不同的连接样式。
内容的提问来源于stack exchange,提问作者Alexandru Pinta
相关产品推荐
相关产品推荐

