如何在R语言hexbinplot中用key/legend添加额外图例?
问题解决:为Hexbin图添加右上角图例
修改后的完整代码
library(hexbin) library(scales) set.seed(100) ab1=runif(100) set.seed(200) ab2=runif(100) hexbinplot(ab1~ab2,xbins=10 ,panel = function(x,y) { panel.hexbinplot(x,y) lattice::panel.polygon(x=c(0.0,0.0,1.0,1.0) ,y=c(0.3,0.5,0.5,0.3) ,col=alpha("skyblue",0.4), border=NA ) lattice::panel.abline(v=0.5,col="pink",lty=4,lwd=2.5) } ,key=list( corner = c(1,1), # 固定图例在右上角 text=list(c("点虚线","阴影区域")), # 对应点虚线的图例样式 lines=list( lty=c(4,NA), col=c("pink",NA), lwd=c(2.5,NA) ), # 对应阴影区域的图例样式,用矩形填充更贴合 rectangles=list( col=c(NA,alpha("skyblue",0.4)), border=c(NA,NA) ), padding.text=2 # 优化文本与符号的间距 ) )
关键修改说明
- 替换图例元素类型:把原来用
points表示阴影区域的方式换成rectangles,和你绘制的填充多边形样式更匹配,避免结构冲突。 - 修正key逻辑结构:不再用NA强行跳过元素,让
lines和rectangles分别对应两个图例条目,每个条目只保留对应样式参数,符合lattice的解析规则。 - 添加位置控制:通过
corner = c(1,1)将图例固定在右上角,满足需求。 - 优化显示细节:用
padding.text调整文本和图例符号的间距,让整体布局更美观。
错误原因解释
之前的写法把lines和points的参数混在一起,用NA填充的方式不符合lattice包对key参数的解析逻辑,导致触发replacement has length zero错误。调整后每个图例项的样式参数一一对应,就能正常生成图例。
内容的提问来源于stack exchange,提问作者Raj Deepak S N
相关产品推荐
相关产品推荐

