2

行列に格納されたデータをプロットするために、filled.contour() を使用しています。データは (非常に) 非線形な関数によって生成されるため、その分布はまったく均一ではなく、範囲が非常に大きくなります。

したがって、オプション「レベル」を使用してプロットを微調整する必要があります。ただし、filled.contour() はこれらのカスタム レベルを使用して、ヒート マップの適切なカラー キーを作成しません。これは非常に驚くべきことです。

これが私が意味することの簡単な例です:

    x = c(20:200/100)
    y = c(20:200/100)
    z = as.matrix(exp(x^2)) %*% exp(y^2)
    filled.contour(x=x,y=y,z=z,color.palette=colorRampPalette(c('green','yellow','red')),levels=c(1:60/3,30,50,150,250,1000,3000))

ご覧のとおり、上記のコードで生成されたカラー キーはほとんど役に立ちません。ある種のプロジェクション (おそらく sin(x) または tanh(x)?) を使用して、キーの上限が (直線的に) 過剰に表現されないようにしたいと考えています。

この時点で、次のことを行います。

1)非常に単純で明白なものが欠けているかどうかを知っています。たとえば、この「キー範囲の適応」を自動的に行うオプション。2) 1) に対する答えが否定的である場合は、自分でそれを行う方法について提案/ヘルプを求めます。

どうもありがとう!

PS: 完璧とはほど遠い私の英語で申し訳ありません。何か明確にする必要がある場合はお知らせください。

4

1 に答える 1

3

私はあなたの欲求不満を感じます。でこれを行う方法が見つからなかったので、通常は独自のスケールをfilled contour使用して別のプロットとして追加することに戻りました。imageこれを支援する関数image.scaleを作成しました(リンク)。以下は、小さな値を引き伸ばすためにスケールに対数変換を提供する方法の例です。次に、対数変換されていない値をラベルとしてスケールにラベルを付けます。

例:

source("image.scale.R") # http://menugget.blogspot.de/2011/08/adding-scale-to-image-plot.html

x = c(20:200/100)
y = c(20:200/100)
z = as.matrix(exp(x^2)) %*% exp(y^2)

pal <- colorRampPalette(c('green','yellow','red'))
breaks <- c(1:60/3,30,50,150,250,1000,3000)
ncolors <- length(breaks)-1
labs <- c(0.5, 1, 3,30,50,150,250,1000,3000)

#x11(width=6, height=6)
layout(matrix(1:2, nrow=1, ncol=2), widths=c(5,1), heights=c(6))
layout.show(2)

par(mar=c(5,5,1,1))
image(x=x,y=y,z=log(z), col=pal(ncolors), breaks=log(breaks))
box()

par(mar=c(5,0,1,4))
image.scale(log(z), col=pal(ncolors), breaks=log(breaks), horiz=FALSE, xlab="", ylab="", xaxt="n", yaxt="n")
axis(4, at=log(labs), labels=labs)
box()

結果:

ここに画像の説明を入力

于 2013-07-22T07:32:21.160 に答える