[英]R — remove ticks from pie chart
我想從R中基本圖形中創建的餅圖中刪除刻度線。
pie(x=rep(1, 12), labels=c("Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug",
"Sep", "Oct", "Nov", "Dec"),
col = rainbow(12),
border=NA)
派對函數似乎不接受par()中的任何圖形參數。
你必須“破解”這個功能。 輸入pie
查看源代碼。 然后刪除繪制刻度lines
:
pie_ <- function (x, labels = names(x), edges = 200, radius = 0.8, clockwise = FALSE,
init.angle = if (clockwise) 90 else 0, density = NULL, angle = 45,
col = NULL, border = NULL, lty = NULL, main = NULL, ...)
{
if (!is.numeric(x) || any(is.na(x) | x < 0))
stop("'x' values must be positive.")
if (is.null(labels))
labels <- as.character(seq_along(x))
else labels <- as.graphicsAnnot(labels)
x <- c(0, cumsum(x)/sum(x))
dx <- diff(x)
nx <- length(dx)
plot.new()
pin <- par("pin")
xlim <- ylim <- c(-1, 1)
if (pin[1L] > pin[2L])
xlim <- (pin[1L]/pin[2L]) * xlim
else ylim <- (pin[2L]/pin[1L]) * ylim
dev.hold()
on.exit(dev.flush())
plot.window(xlim, ylim, "", asp = 1)
if (is.null(col))
col <- if (is.null(density))
c("white", "lightblue", "mistyrose", "lightcyan",
"lavender", "cornsilk")
else par("fg")
if (!is.null(col))
col <- rep_len(col, nx)
if (!is.null(border))
border <- rep_len(border, nx)
if (!is.null(lty))
lty <- rep_len(lty, nx)
angle <- rep(angle, nx)
if (!is.null(density))
density <- rep_len(density, nx)
twopi <- if (clockwise)
-2 * pi
else 2 * pi
t2xy <- function(t) {
t2p <- twopi * t + init.angle * pi/180
list(x = radius * cos(t2p), y = radius * sin(t2p))
}
for (i in 1L:nx) {
n <- max(2, floor(edges * dx[i]))
P <- t2xy(seq.int(x[i], x[i + 1], length.out = n))
polygon(c(P$x, 0), c(P$y, 0), density = density[i], angle = angle[i],
border = border[i], col = col[i], lty = lty[i])
P <- t2xy(mean(x[i + 0:1]))
lab <- as.character(labels[i])
if (!is.na(lab) && nzchar(lab)) {
#lines(c(1, 1.05) * P$x, c(1, 1.05) * P$y)
text(1.1 * P$x, 1.1 * P$y, labels[i], xpd = TRUE,
adj = ifelse(P$x < 0, 1, 0), ...)
}
}
title(main = main, ...)
invisible(NULL)
}
也許不是最好的解決方案,但你可以用ggplot2
而不是pie()
函數來做你的餅圖。
library(ggplot2)
df <- data.frame(y=rep(1, 12),
labels=c("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"))
ggplot(df, aes(factor(0), y, fill=factor(labels))) +
geom_bar(stat="identity") +
coord_polar(theta="y", start=-pi/2, direction=-1) +
theme_bw() +
theme(axis.ticks=element_blank(),
axis.text.y=element_blank(),
axis.text.x=element_text(color="black"),
axis.title=element_blank(),
legend.position="none",
panel.grid.major=element_blank(),
panel.grid.minor=element_blank(),
panel.border=element_blank()) +
scale_y_continuous(breaks=cumsum(df$y)-df$y/2,
labels=df$labels) +
scale_fill_manual(values=rainbow(12))
不知何故偶然發現了這個老帖子並想到了另一個,盡管是“hacky”解決方案。 只需在原件上疊加稍大的副本(無標簽)即可覆蓋刻度線。
par(new = T)
pie(x=rep(1, 12), labels = "",
col = rainbow(12),
radius = .84,
border=NA)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.