以前教えて頂いた以下コードにて、この画像が作成できました。
R
1pie315 <- function (x, labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE, 2 init.angle = if (clockwise) 90 else 0, density = NULL, angle = 45, 3 col = NULL, border = NULL, lty = NULL, main = NULL, ...) 4{ 5 if (!is.numeric(x) || any(is.na(x) | x < 0)) 6 stop("'x' values must be positive.") 7 if (is.null(labels)) 8 labels <- as.character(seq_along(x)) 9 else labels <- as.graphicsAnnot(labels) 10 x <- c(0, cumsum(x)/sum(x)) 11 dx <- diff(x) 12 nx <- length(dx) 13 plot.new() 14 pin <- par("pin") 15 xlim <- ylim <- c(-1, 1) 16 if (pin[1L] > pin[2L]) 17 xlim <- (pin[1L]/pin[2L]) * xlim 18 else ylim <- (pin[2L]/pin[1L]) * ylim 19 dev.hold() 20 on.exit(dev.flush()) 21 plot.window(xlim, ylim, "", asp = 1) 22 if (is.null(col)) 23 col <- if (is.null(density)) 24 c("white", "lightblue", "mistyrose", "lightcyan", 25 "lavender", "cornsilk") 26 else par("fg") 27 if (!is.null(col)) 28 col <- rep_len(col, nx) 29 if (!is.null(border)) 30 border <- rep_len(border, nx) 31 if (!is.null(lty)) 32 lty <- rep_len(lty, nx) 33 angle <- rep(angle, nx) 34 if (!is.null(density)) 35 density <- rep_len(density, nx) 36 twopi <- if (clockwise) 37 -2 * pi 38 else 2 * pi 39 t2xy <- function(t) { 40 t2p <- twopi * t + init.angle * pi/180 41 list(x = radius * cos(t2p), y = radius * sin(t2p)) 42 } 43 for (i in 1L:nx) { 44 n <- max(2, floor(edges * dx[i])) 45 P <- t2xy(seq.int(x[i], x[i + 1], length.out = n)) 46 polygon(c(P$x, 0), c(P$y, 0), density = density[i], angle = angle[i], 47 border = border[i], col = col[i], lty = lty[i]) 48 P <- t2xy(mean(x[i + 0:1])) 49 lab <- as.character(labels[i]) 50 if (!is.na(lab) && nzchar(lab)) { 51 text(0.92 * P$x, 0.85 * P$y, labels[i], xpd = TRUE, 52 adj = ifelse(P$x > 0, 1, 0), ...) 53 } 54 } 55 title(main = main, ...) 56 invisible(NULL) 57} 58 59png("graph.png", width = 800, height = 700) # 描画デバイスを開く 60 61x <- c(20, 15, 10, 5) 62 63# 外側の円 64pie315(x, # ダミー 65 radius=0.8, # 半径 66 clockwise=T, 67 labels=c("A","B","C","D"), 68 cex=2, 69 col=c("black","yellow","red","blue")) 70 71# 重ね描き 72par(new=TRUE) 73 74pie315(x, 75 radius=0.6, # 半径 76 clockwise=T, 77 labels=c("A","B","C","D"), 78 cex=2, 79 col=c("red","green","blue","gray")) 80 81# 重ね描き 82par(new=TRUE) 83 84# 中央の白円 85pie315(1, # ダミー 86 radius=0.4, # 半径 87 col="white", # 領域の色 88 border="white", # 枠線の色 89 labels="") # ラベル非表示 90 91# テキストの挿入 92text(0, 0, # 挿入位置 93 labels="pie12", 94 cex=3, 95 col="red") 96 97dev.off()
で、更に質問があり、方法やヒントだけでも教えて頂けると有難いのですが、
このグラフを、どこまで変形できるのか、が、問題なのですが、
例えば、
1.内円と外円の間を密着させず、間隔を少し開ける(間に白円を入れる)。
2.内円と外円の間の黒線を消す(例えば、B緑とB黄を仕切っている細い黒線を消す)。
こういった事は、できるのでしょうか、どのようにするのでしょう・・・。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/01/06 15:37