我有一张有三角形的彩色噪声正方形。
现在,我想让多边形像圣诞节的饼干切割器一样,将这个噪声切成一个三角形,以多边形路径包围。
如何裁剪所有与多边形边框重叠的像素,然后将其保存为PDF?
我想出了两个方法:
- 方法1:使用一个函数来测试像素(彩色噪声)是否落在图形内部。让我们试试!
问题:边界像素的边缘超出了线条。在这个例子中,这相当微小。您可以通过使多边形线条稍微变大来解决这个问题。 - 方法2:反转多边形形状(相当于:填充多边形外部),然后用白色填充。
问题:在绘图预览窗口中,结果看起来就像我想要的。但是当我将其保存为PDF时,得到的结果是全部都是带黑色多边形形状的白色。
可重复示例:
library(magrittr)
library(ggplot2)
library(SDMTools)
polyGony <- c(0,0,100,50,50,100) %>% matrix(ncol=2,byrow = T) %>% as.data.frame()
deltaN <- 200 #grid width
sp1<-seq(1,100,length=deltaN)
sp2<-seq(1,100,length=deltaN)
sp<-expand.grid(x=sp1,y=sp2)
set.seed(1337)
sp$z <- sample(1:30,nrow(sp),replace = T)
# Method 1
outin = SDMTools::pnt.in.poly(sp[,1:2],polyGony)
outin$z <- sp$z
pointsInsideTri <- outin[outin$pip==1,-3]
p <- ggplot(pointsInsideTri, aes(x, y)) +
geom_raster(aes(fill = z)) +
scale_fill_gradientn(colours=c("#FFCd94", "#FF69B4", "#FF0000","#4C0000","#000000"))
p + geom_polygon(data = polyGony, aes(V1,V2),color="black", fill=NA) + theme(aspect.ratio = 1)
# Method 2
outSQ <-c(0,0,100,0,100,100,0,100)
invPolyGony <- c(outSQ,0,0,100,50,50,100) %>% matrix(ncol=2,byrow = T) %>% as.data.frame()
p <- ggplot(sp, aes(x, y)) +
geom_raster(aes(fill = z)) +
scale_fill_gradientn(colours=c("#FFCd94", "#FF69B4", "#FF0000","#4C0000","#000000"))
p + geom_polygon(data = invPolyGony, aes(V1,V2) ,colour="black", fill="white") + theme(aspect.ratio = 1)