3

filled.contour以下のコードのように、z 値にある種の対称性を持つプロットを作成する必要があります。

x <- 1:5
y <- 1:5
z <- matrix(outer(x,y,"+"),nrow=5)
filled.contour(x,y,z)
filled.contour(x,y,z,color.palette=rainbow)
z2 <- z
z2[5,5] <- Inf
filled.contour(x,y,z2,col=rainbow(200),nlevels=200)

次のプロットを取得するために、特定のレベルまたは増分 (2,4,6,8,10) の増分など、z 値のレベルを線引きできるようにしたいと考えています。

ここに画像の説明を入力

滑らかな色と色の変化をプロットするためにレベルを残したいのですが、col=rainbow(200)特定の値/増分を描きたいです。

これは可能ですか?基本Rソリューションをいただければ幸いですが、これが不可能な場合は、どのソリューションでも良いでしょう(ggplot、格子)

4

3 に答える 3

4

countourLines() を使用して行を追加し、 text() を使用してテキストを追加できます。

txtlab <- c("2", "4", "6", "8", "Inf")
txtpos <- c(1.25, 2, 3, 4, 4.75)
ctlns <- contourLines(x, y, z2, levels=c(3, 5, 7, 9))
filled.contour(x,y,z2,col=rainbow(200),nlevels=200, 
     plot.axes={axis(1); axis(2); text(txtpos, txtpos, txtlab, cex=1.5);
     sapply(1:4, function(x) lines(ctlns[[x]][[2]], ctlns[[x]][[3]], lwd=2))
})

塗りつぶされた輪郭

于 2013-01-06T20:38:40.117 に答える
1

これは、すべての整数に対して黒です (is.integer の例を使用)。これを変更してblack、偶数の整数のみを返すようにすることは非常に簡単です。

getcolor <- function(z, n) {
  is.wholenumber <-
    function(x, tol = .Machine$double.eps^0.5)  abs(x - round(x)) < tol
  pp <- pretty(range(z, finite=TRUE), n)
  ifelse(is.wholenumber(pp), 'black', rainbow(n))
}

filled.contour(x,y,z2,col=getcolor(z2, 200),nlevels=200)

ここに画像の説明を入力

于 2013-01-06T19:20:46.723 に答える