我正在用ggplot
做一个环形图,我想在类别中添加边框,但是它们会重叠。有没有办法使边框在矩形内部?
可复制的示例。
数据:
plot.df <- data.frame("number"=c(3455, 3714, 2345),
"group"=c("A","B", "C"))
plot.df$fraction <- plot.df$number / sum(plot.df$number)
plot.df <- plot.df[order(plot.df$fraction), ]
plot.df$ymax <- cumsum(plot.df$fraction)
plot.df$ymin = c(0, head(plot.df$ymax, n=-1))
图:
ggplot(plot.df, aes(color = group, fill=group,
ymax=ymax, ymin=ymin,
xmax=4, xmin=2.5)) +
geom_rect(alpha = 0.6, size = 4) +
coord_polar(theta="y") +
xlim(c(0, 4)) +
theme_bw() +
theme(panel.grid=element_blank(), axis.text=element_blank()) +
theme(axis.ticks=element_blank()) +
labs(title="My Ring Plot", x = "", y = "",
fill = "", color = "") +
theme(plot.title = element_text(hjust = 0.5))
我得到以下图,除边框外,这是正确的。
例如,在B和C之间,只有B(绿色)边框可见,我想在粗蓝线旁边看到一条粗绿线。我自己解释了吗?
感谢您的帮助!
编辑:
我发现了一个肮脏的解决方案,虽然它不是完美的或优雅的,但确实可以完成工作。
首先,我们需要修改ymin列
plot.df$ymin = c(0.0125, head(plot.df$ymax, n=-1)+ 0.0125)
,然后为“ ghost”类别添加新行
plot.df <- rbind(c(234, "D", 0.0125, 0.0125, 0), plot.df)
plot.df[,4] <- as.numeric(plot.df[,4])
plot.df[,5] <- as.numeric(plot.df[,5])
现在我们可以使情节隐藏“幽灵”类别
ggplot(plot.df, aes(color = group, fill=group,
ymax=ymax, ymin=ymin,
xmax=4, xmin=3)) +
geom_rect(alpha = 0.6, size = 4) +
coord_polar(theta="y") +
xlim(c(0, 4)) +
theme_bw() +
scale_fill_manual(breaks = c("A", "B", "C"),
values = c("red", "green", "blue", "white"),
aesthetics = c("colour", "fill")) +
theme(panel.grid=element_blank(), axis.text=element_blank()) +
theme(axis.ticks=element_blank()) +
labs(title="My Ring Plot", x = "", y = "",
fill = "", color = "") +
theme(plot.title = element_text(hjust = 0.5))
看起来像我要找的东西,但是我做的方式并不理想。
还有其他解决方案吗?谢谢!