1

大概是一个简单的。

有没有办法消除 ggforce::geom_arc_bar 饼图中的边界线?

pie <- data.frame(
    state = c('eaten', 'eaten but said you didn\'t', 'cat took it', 
              'for tonight', 'will decompose slowly'),
    focus = c(0.2, 0, 0, 0, 0),
    start = c(0, 1, 2, 3, 4),
    end = c(1, 2, 3, 4, 2*pi),
    amount = c(4,3, 1, 1.5, 6),
    stringsAsFactors = FALSE
)
ggplot(pie) + 
    geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0, r = 1, amount = amount, 
                     fill = state, explode = focus), stat = 'pie') + 
    scale_fill_brewer('', palette = 'Set1') +
    coord_fixed()

在此处输入图像描述

例如,在上图中,要么消除黑色边框线,要么使其颜色与填充颜色相同?

还有一个问题,是否可以只从馅饼的周边消除边界线?那么只有切片的分界线会保留吗?

4

2 回答 2

2

您可以添加color = "transparent"color = NA里面geom_arc_bar

在此处输入图像描述

代码

library(ggforce)
ggplot(pie) + 
  geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0, r = 1, amount = amount, 
                   fill = state, explode = focus), stat = 'pie',
                   color = "transparent") + 
  scale_fill_brewer('', palette = 'Set1') +
  coord_fixed()
于 2019-05-21T20:46:36.577 回答
2

ggplot 通常使用两个颜色参数:

col = 

fill = 

您分配了填充(内部),但没有处理 col(轮廓)。

以下应该有效,我分配 col=NA

ggplot(pie) + 
  geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0, r = 1, amount = amount, 
                   fill = state, explode = focus), col=NA,stat = 'pie') + 
  scale_fill_brewer('', palette = 'Set1') +
  coord_fixed()

编辑:所以回答第二个问题 - 我真的不知道这是否可能(我对 ggforce 不太熟悉)鉴于此,我在这个非常“hacky”的解决方案之前请求宽恕。但我觉得最好为别人提供一些改进的东西。

解释:保持原始轮廓,然后使用 geom_arc0 函数绘制与每个段相同颜色的新轮廓”

geom_arc0(aes(x0 = 0, y0 = 0, r = 1, start = start, end = end, 
              colour = factor(state)), data = pie, ncp = 50)

在上下文中:

ggplot(pie) + 
  geom_arc_bar(aes(x0 = 0, y0 = 0, r0 = 0, r = 1, amount = amount, 
                   fill = state, explode = focus), col="black",stat = 'pie') + 
  geom_arc0(aes(x0 = 0, y0 = 0, r = 1, start = start, end = end, 
                colour = factor(state)), data = pie, ncp = 50)
  scale_fill_brewer('', palette = 'Set1') +
  coord_fixed()

它可能看起来有点狡猾——如果你增加 ncp 参数,它会为轮廓添加更多点(从而更接近完美的圆)——我被限制为 ncp=2000。

再次道歉,它是如此的hacky。

于 2019-05-21T20:50:24.637 回答