10

私はスティーブン・フューのグラフィックをグラデーションの円で再現しようとしています。これは、光が上から現れるというハードワイヤードな仮定を示しています。サークルは次のとおりです。

ここに画像の説明を入力

どうすればこれを再現できますか? 円を描くことはそれほど悪くありませんが、グラデーションを追加することは私が投げられるところです。グリッドはより鮮明なものを作成できると考えていますが、これは私の誤解かもしれません。

円を描くことから始めましょう:

## John Fox circle function
source("http://dl.dropboxusercontent.com/u/61803503/wordpress/circle_fun.txt")

par(mar=rep(1, 4), bg = "grey80")
plot.new()

for (i in seq(0, 1, by = .2)) {
    for (j in seq(.6, 1, by = .1)) {
        circle(i, j, .5, "cm", , 1)
    }
}

関連する質問: R を使用してグラデーション塗りつぶしのバブル チャートを作成する方法

編集:

結果を共有したいと思いました: ここに画像の説明を入力

コードは次のとおりです。

4

4 に答える 4

9

を繰り返し使用するとclip、そこにたどり着くことができます。

# set up a blank plot
par(mar=rep(0, 4))
par(bg="#cccccc")
plot(NA,xlim=0:1,ylim=0:1)

# define a function
grad.circ <- function(centrex,centrey,radius,col,resolution) {
  colfunc <- colorRampPalette(col)
  shades <- colfunc(resolution)

  for (i in seq_along(shades) ) {
   clip(
      centrex - radius,
      centrex + radius,
      (centrey + radius) - ((i-1) * (radius*2)/length(shades)),
      (centrey + radius) - (i     * (radius*2)/length(shades))
       )
   symbols(
     centrex,
     centrey,
     circles=radius,
     bg=shades[i],
     fg=NA,
     add=TRUE,
     inches=FALSE
          )
  }
}

# call the function
grad.circ(0.5,0.5,0.5,c("black", "white"),300)

結果:

ここに画像の説明を入力

編集(タイラー・リンカーによる):

画像を複製するために使用した残りのコードを追加したいと思いました。

FUN <- function(plot = TRUE, cols = c("black", "white")) {
    plot(NA, xlim=0:1, ylim=0:1, axes=FALSE)
    if (plot) {
        grad.circ(0.5, 0.5, 0.5, cols, 300)
    }
}

FUN2 <- function(){
    lapply(1:3, function(i) FUN(,c("white", "black")))
    FUN(F)
    lapply(1:3, function(i) FUN())
}


X11(10, 4.5)
par(mfrow=c(3, 7))
par(mar=rep(0, 4))
par(bg="gray70")
invisible(lapply(1:3, function(i) FUN2()))
于 2013-06-27T03:39:09.183 に答える