geom_point引入了geom_polar pie(donut)图表开始的转变

时间:2017-10-22 20:13:35

标签: r plot ggplot2 pie-chart

在使用ggplot2创建饼图时,我偶然发现了极坐标图开始的奇怪行为。如果我们采取

dta <- data.frame(val = 1:60, col = rep(c(0,1), each = 10))

并使用

制作饼图
library(ggplot2)
ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
  geom_col() + 
  coord_polar(start = 0)

我们最终得到了预期的饼图: enter image description here

说,我们想在图表中间创建一个小甜甜圈洞,我们可以通过在中间添加一个点来实现:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
  geom_col() + 
  coord_polar(start = 0) + 
  geom_point(aes(0,0), size = 30, color = "lightgrey", show.legend = FALSE) 

然而,这一点引入了饼图开始的奇怪转变,导致顶部的灰色扇区很小。

enter image description here

为什么会造成这种转变?怎么可以避免?顺便说一句。这种转变也由geom_vline(xintercept = 0)等其他地方引入。

1 个答案:

答案 0 :(得分:4)

这种转变看起来像?scale_x_continuous()。它的expand参数说,“连续变量的默认值为c(0.05,0),离散变量的默认值为c(0,0.6)。”。

因此,如果您希望消除这一差距,可以在geom_point()之外定义aes()图层,以防止scale_x_continuous参与其中:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) +
    geom_point(x = 0, y = 0, size = 30, color = "lightgrey", show.legend = FALSE)

enter image description here

或者调整传递给expand参数的值:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) + 
    geom_point(aes(0,0), size = 15, color = "lightgrey", show.legend = FALSE) +
    scale_x_continuous(expand = c(0,-.25))

我不确定为什么c(0,0)无法产生所需的输出......

enter image description here

对于geom_vline()案例(再次不确定为什么会这样做,coord_polar()是挑剔的家伙)我们可以将geom_vline(xintercept = .5)添加到上述任一策略中,并获得适当放置的垂直线:

ggplot(dta, aes(x = val, y = 2, fill = factor(col), color = factor(col))) + 
    geom_col() + 
    coord_polar(start = 0) +
    geom_point(x = 0, y = 0, size = 30, color = "lightgrey", show.legend = FALSE) +
    geom_vline(xintercept = .5)

enter image description here

我认为第一种策略更好,因为第二种策略似乎是将颜色边界(和vline)远离“真正的”垂直倾斜。在小预览窗口的第一遍中没有看到它..