17

グレーの半透明レイヤーを画像に追加し、そのレイヤーにキーホールをカットして、下の画像の特定の部分を強調表示する手法を使用すると役立つ場合があります。これは、 YouTube ビデオの例です。

ここに画像の説明を入力

プロットでこれを行うこともありますが、Inkscape を使用して半透明のレイヤーを追加し、消しゴムを使用してそのレイヤーに穴を開けます。これは、(a) 専門的とは言えないように見えます (b) 余分な時間と別のプログラムが必要であり、(c) 品質が低下する可能性があります。

Rでやりたいです。これは私の選択したツールであるため、ggplot2について尋ねていますが、グリッドの答えはどれでも良いと思います(ベースにはおそらく非常に異なるアプローチがあることを知っています)。

そこで、鍵穴/窓を切り取る場所を示すために を追加した MWE をgeom_rect次に示します。

ggplot(mtcars, aes(mpg, wt)) + 
    geom_point(size=3) +    
    geom_rect(mapping=aes(xmin=20, xmax=25, 
        ymin=3, ymax=3.3), color="black", alpha=.01)

R を使用して、次のようなプロットを作成するにはどうすればよいですか。

ここに画像の説明を入力

4

3 に答える 3

19

パッケージgrid.path(...)内でこれを行うことができます。ドキュメントgridを読んで、穴のあるパスを作成する方法を確認してください。

library(gridExtra)
library(ggplot2)

ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3)
grid.newpage()
grid.draw(arrangeGrob(ggp))
grid.path(c(0,0,1,1,.48,.48,.62,.62),
                    c(0,1,1,0,.43,.50,.50,.43),
                    id=rep(1:2, each=4),
                    rule="evenodd",gp=gpar(fill="black", alpha=0.6))

注意:パッケージgrid.draw(...)grid.path(...)入っています。パッケージに入っています。ロードすると、ロードされます。編集を提案してくれた@MartinBelに感謝します。gridarrangeGrob(...)gridExtragridExtragrid

@BrandonBertelsen コメントへの対応:grid.path(...)形状にとらわれない。座標を指定するだけです。

center <- c(x=0.55,y=0.48)
r      <- 0.1
circle <- do.call(rbind,lapply(seq(0,2*pi,length=36),
                               function(th)c(x=r*cos(th),y=r*sin(th))))
circle <- data.frame(circle)
circle$x <- circle$x + center["x"]
circle$y <- circle$y + center["y"]

ggp <- ggplot(mtcars, aes(mpg, wt)) + geom_point(size=3)
grid.newpage()
grid.draw(arrangeGrob(ggp))
grid.path(c(0,0,1,1,circle[,1]),
          c(0,1,1,0,circle[,2]),
          id=c(1,1,1,1,rep(2,nrow(circle))),
          rule="evenodd",gp=gpar(fill="black", alpha=0.6))

プロット ウィンドウの縦横比により、「円」は楕円になります。


参考文献: It's Not What You Draw, It's What You Don't Draw (R ジャーナルの Paul Murrell 著)

于 2014-01-26T23:33:59.697 に答える