2016-12-21 2 views
1

三角形の色付きの四角形があります。 今、ポリゴンにこのノイズをクリスマスの「クッキーカッター」のようにカットしたいと思っています。ポリゴンパスで囲まれた三角形のノイズが発生します。ポリゴンの外側にあるものをすべて切り取ったり、外側を白く塗りつぶしたりします。

ポリゴンの境界線に重なるすべてのピクセルをクリップし、pdfとして保存するにはどうすればよいですか?

I 2つのアイデアを思い付いた:画素(有色ノイズ)状にか下がるかどうかをテストする関数を使用方法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) 
+0

あなたの唯一の問題はありますか?私にはあなたが探しているものは明確ではありません。 – Christoph

+0

ピクセルベースのイメージをポリゴンパスで囲みたい。ピクセルはポリゴンの境界線から「ラップ」しないでください。それから私はそれをpdfファイルに保存します。 –

+0

私が理解するところでは、あなたの話は誤解を招く(または間違っている)。あなたは何をしたいのか、どの方法を使いたいのかを知っています。あなたの問題は、pdfとして結果を保存する方法だけです。 – Christoph

答えて

0

私は今、問題が何であったかを知っています。ポリゴンの外側にあるものをすべて埋めるには、パス(中央の穴)を時計回りに「走らせる」必要があります。外側の境界線は反時計回りに動く必要があります。

私は簡単な例を作った。私たちは星の多角形を持っています。私は星の外のすべてを赤色にしたい。

star <- c(25.000,1.000,31.000,18.000,49.000,18.000,35.000,29.000,40.000,46.000, 
      25.000,36.000,10.000,46.000,15.000,29.000,1.000,18.000,19.000,18.000) %>% matrix(ncol=2, byrow=T) 
star <- rbind(star,star[1,]) 
rim <- c(0,0, 50,0, 50,50,0,50,0,0) %>% matrix(ncol=2, byrow=T) 

datapolyM <- rbind(rim,star) %>% as.data.frame() 
names(datapolyM) <- c("x","y") 

ggplot(datapolyM, aes(x=x, y=y)) + 
    geom_polygon(fill="red", colour="black") 

pdfへエクスポート!イメージ全体が赤く塗られていることがわかります!

今すぐ時計回りに実行するためにスターのパスを回すことができます:2行目に適用し、逆コマンドを尊重してください:

star <- c(25.000,1.000,31.000,18.000,49.000,18.000,35.000,29.000,40.000,46.000, 
      25.000,36.000,10.000,46.000,15.000,29.000,1.000,18.000,19.000,18.000) %>% matrix(ncol=2, byrow=T) %>% apply(2, rev) 
star <- rbind(star,star[1,]) 
rim <- c(0,0, 50,0, 50,50,0,50,0,0) %>% matrix(ncol=2, byrow=T) 

datapolyM <- rbind(rim,star) %>% as.data.frame() 
names(datapolyM) <- c("x","y") 
datapolyM$id <- "a" 

ggplot(datapolyM, aes(x=x, y=y)) + 
    geom_polygon(fill="red") 

は今再びPDFにエクスポートします。あなたは今度はそれが働いているのを見るでしょう!与えられた多角形の外にすべてを塗りつぶしました!

関連する問題