在使用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)
说,我们想在图表中间创建一个小甜甜圈洞,我们可以通过在中间添加一个点来实现:
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)
然而,这一点引入了饼图开始的奇怪转变,导致顶部的灰色扇区很小。
为什么会造成这种转变?怎么可以避免?顺便说一句。这种转变也由geom_vline(xintercept = 0)
等其他地方引入。
答案 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)
或者调整传递给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)
无法产生所需的输出......
对于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)
我认为第一种策略更好,因为第二种策略似乎是将颜色边界(和vline)远离“真正的”垂直倾斜。在小预览窗口的第一遍中没有看到它..