6

stat_density2dR、ggplot2では、ジオメトリオブジェクトで使用されているグリッドを三角形の領域で制限するように変更するにはどうすればよいですか?

標準の 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

これにより、次のものが生成されます。

サンプル2

では、三角形で囲まれるようにグリッドを変更するにはどうすればよいですか。元のデカルトプロットの境界ではありませんか?

4

2 に答える 2

5

ggternパッケージを公開して以来、これは次の単純なコードを使用して達成できる結果です。

#load the library
library(ggtern)

#Create dummy data
df <- data.frame(T=c(.8,.1,.1),
                 L=c(.1,.8,.1),
                 R=c(.1,.1,.8))

#Now plot the diagram
ggtern(data=df,aes(y=T,x=L,z=R)) + geom_point() + geom_density2d() + theme_bw()

ここに画像の説明を入力

于 2014-02-10T11:52:07.120 に答える
1

これはやや大雑把なオプションですが、ここでは部分的にしか示していません。

d1 <- data.frame(x = c(0,0.5,0),y = c(0,1,1))
p + geom_polygon(data = d1,aes(x = x,y = y),fill = "white",colour = "black")

ggplot2 を削除する必要があると思いますが、ここここで調査できる他のアイデアがいくつかあります。

理論的には、 を使用して凝ったことを行うこともできますgrid.pathが、(いつものように) デバイスとプロット座標系の間をきれいに移動することが困難です。

于 2013-09-17T16:45:19.783 に答える