在使用 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)
。
最佳答案
该转变看起来像是来自 ?scale_x_continuous()
。它的 expand
参数表示:“连续变量的默认值为 c(0.05, 0),离散变量的默认值为 c(0, 0.6)。”。
因此,如果您想消除这种差距,您可以在 aes()
之外定义 geom_point()
层,以防止 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)明显倾斜远离“真正的”垂直方向。第一次在小预览窗口中没有看到这一点。
关于r - geom_point 在 geom_极地饼图(圆环图)图表的开头引入偏移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46878709/