如何使用ggplot制作内部边框

时间:2019-04-24 16:31:35

标签: r ggplot2

我正在用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))

我得到以下图,除边框外,这是正确的。

ring plot

例如,在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))

ring plot 2

看起来像我要找的东西,但是我做的方式并不理想。

还有其他解决方案吗?谢谢!

0 个答案:

没有答案