11

ggplot2を使用して、シンプレックスに3次元データの射影をプロットしたいと思います。を使用してデカルト座標の変換を管理できると思いましcoord_trans()たが、正確に行う方法がわかりません。

これは私が試したものです:

simplex.y  <- function( x1, x2, x3 ) {
  return( sqrt(0.75) *  x3 / (x1+x2+x3) )
} 
simplex.x  <- function( x1, x2, x3 ) {
  return( (x2 + 0.5 * x3) / (x1+x2+x3) )
}

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

require(ggplot2)
ggplot( data = x, aes( x = c(x1, x2, x3), y = c(x1, x2, x3)) ) +
  geom_point() +
  coord_trans( x="simplex.x", y="simplex.y" )

任意の提案をいただければ幸いです。どうもありがとう!

4

7 に答える 7

17

mmann1123が強調したように、ggternを使用する、次のことが実現できます。

出力

次の単純なコードブロックを使用します。

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

ggtern(data=x,aes(x2,x1,x3)) + 
   geom_mask() +
   geom_point(fill="red",shape=21,size=4) + 
   theme_bw() +
   theme_showarrows() +
   theme_clockwise()
于 2013-12-30T01:28:59.717 に答える
6

vcdパッケージのternaryplot関数は、正規化されていないデータから古典的な三角プロットを作成するという優れた機能を果たします。

require(vcd)
#ternaryplot takes matrices but not data frames
xM <- as.matrix(x)
ternaryplot(xM)

ここに画像の説明を入力してください

于 2012-05-04T17:01:54.903 に答える
2

RパッケージのTernaryは、標準のグラフィック関数を使用して、行列とdata.framesから3値プロットを生成します。

RパッケージTernaryで作成された三角プロット

上記のプロットは次のように作成されます。

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)
TernaryPlot()
TernaryPoints(x, col='red')
于 2017-12-21T16:42:55.113 に答える
1

coord_transあなたが思っていることをしません。すでに2Dであるプロットのx座標とy座標を変換しますが、3Dデータがあります。

データを自分で変換してからプロットするだけです。

simplex.y  <- function(x) {
  return( sqrt(0.75) *  x[3] / sum(x) )
} 
simplex.x  <- function(x) {
  return( (x[2] + 0.5 * x[3]) / sum(x) )
}

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

newDat <- data.frame(x = apply(x,1,simplex.x),
                y = apply(x,1,simplex.y))

ggplot(newDat,aes(x = x,y = y)) + 
    geom_point()

変換関数をよりRに似たものに書き直したことに注意してください。x = c(x1,x2,x3)また、 insideのような式を渡してはいけませんaes()。データフレーム内の単一の変数を単一の美学にマッピングします。

于 2012-05-03T21:50:51.593 に答える
1

ここで読むことができるggternライブラリを使用してください。 http://ggtern.com/

于 2013-12-12T20:23:34.483 に答える
1

ade4完全を期すために、古き良きパッケージを試すことができます。

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

require(ade4)
triangle.plot(x)
于 2019-08-20T08:49:17.393 に答える
1

パッケージの関数triax.plot()は、plotrix三角プロットも描画します。

require(plotrix)

x  <- data.frame(
  x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
  x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
  x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

triax.plot(x, pch=16,col.symbols="red")
于 2019-12-04T23:50:49.533 に答える