いくつかのカスタム関数を使用していますが、パラメーターの複数の値に基づいて輪郭を描画する必要があります。
関数の例を次に示します。
このような等高線図を描く必要があります:
何か案が?
ありがとう。
最初に、fourvar
これら 4 つのパラメーターを引数として受け取る関数を作成します。この場合、lambda_1 よりも lambda_2 の 3 つの変数を使用して実行できます。Alpha1 は 2 に固定されているため、alpha_1/alpha_2 は 0 ~ 10 で変化します。
fourvar <- function(a1,a2,l1,l2){
a1* integrate( function(x) {(1-x)^(a1-1)*(1-x^(l2/l1) )^a2} , 0 , 1)$value }
秘訣は、integrate
関数がリストを返し、そのリストの「値」部分のみが必要であるため、それを編集できることを認識することVectorize()
です。
次に、その関数を使用して行列を作成します。
mat <- outer( seq(.01, 10, length=100),
seq(.01, 10, length=100),
Vectorize( function(x,y) fourvar(a1=2, x/2, l1=2, l2=y/2) ) )
次に、これらの位置にラベルを付けてプロットを作成するタスクは、 でのみ簡単に実行できlattice::contourplot
ます。妥当な量の検索を行った後、geom_contour ラベル付けの解決策は ggplot2 でまだ進行中の作業のようです。私が見つけた唯一のラベリング戦略は、外部パッケージにあります。ただし、この場合、「directlabels」パッケージの機能directlabel
には、ラベルを正しく展開するための十分な制御がないようです。私が見た他の例では、プロット エリアの周りにラベルを広げています。コードを見ればわかると思いますが、「proto」パッケージに依存しているため、変にカプセル化されている可能性が高いので、見ていません。
require(reshape2)
mmat <- melt(mat)
str(mmat) # to see the names in the melted matrix
g <- ggplot(mmat, aes(x=Var1, y=Var2, z=value) )
g <- g+stat_contour(aes(col = ..level..), breaks=seq(.1, .9, .1) )
g <- g + scale_colour_continuous(low = "#000000", high = "#000000") # make black
install.packages("directlabels", repos="http://r-forge.r-project.org", type="source")
require(directlabels)
direct.label(g)
これらは、パラメーターの比率ではなく、マトリックスからのインデックス位置であることに注意してください。ただし、修正は非常に簡単です。
一方、これは、格子でそれを構築することがいかに簡単かです (そして、「よりきれいに」見えると思います:
require(lattice)
contourplot(mat, at=seq(.1,.9,.1))