在R中的ggplot2中,我该如何将
stat_density2d
几何对象所使用的网格限制在三角形区域内?我正在绘制非标准ggplot2类型的三元图,轮廓线溢出了坐标轴。实际的三元图代码相当冗长,但本质上,我需要将轮廓线限制在等边三角形内。以下是可复现问题的示例代码:library(ggplot2)
triangle <- data.frame(x=c(0,.5,1),y=c(0,1,0))
dummy <- data.frame(x=c(0.25,0.50,0.75),y=c(0.25,0.75,0.25))
p <- ggplot() + geom_polygon(data=triangle,aes(x,y),fill="transparent",color="black",size=1)
p <- p + geom_point(data=dummy,aes(x,y))
p <- p + stat_density2d(data=dummy,aes(x,y)) + theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(), axis.ticks = element_blank(),
axis.text.x = element_blank(), axis.text.y = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
p
我认为这是因为网格与绘图区域的原始笛卡尔坐标边界相关联,为了说明这一点,请考虑以下代码:
library(ggplot2)
triangle <- data.frame(x=c(0,.5,1),y=c(0,1,0))
dummy <- data.frame(x=c(0.25,0.50,0.75),y=c(0.25,0.75,0.25))
p <- ggplot() + geom_polygon(data=triangle,aes(x,y),fill="transparent",color="black",size=1)
p <- p + geom_point(data=dummy,aes(x,y))
p <- p + stat_density2d(data=dummy,aes(x,y),geom='tile',contour=F,fill="transparent",color="magenta") + theme_bw() +
theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
panel.border = element_blank(), axis.ticks = element_blank(),
axis.text.x = element_blank(), axis.text.y = element_blank(),
axis.title.x = element_blank(), axis.title.y = element_blank())
p
这将产生以下结果:
那么我该如何更改网格以便受三角形限制,而不是原始的笛卡尔绘图边界?
sp
包中的point.in.polygon
命令将所有位于三角形周边以外的点的网格值设置为“0”。 - Nicholas Hamilton