geom_point 在 geom_polar 饼图(甜甜圈)图表的开头引入偏移
geom_point introducing shift in start of geom_polar pie (doughnut) 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)
我们最终得到了预期的饼图:
说,我们想在图表中间创建一个小甜甜圈洞,我们可以通过在中间添加一个点来实现:
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 引入,如 geom_vline(xintercept = 0)
。
班次看起来像是从 ?scale_x_continuous()
开始的。它的 expand
参数说,"The defaults are c(0.05, 0) for continuous variables, and c(0, 0.6) for discrete variables.".
所以如果你想消除这个差距,你可以在 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)从 "true" 垂直方向稍微倾斜。在小预览的第一遍中没有看到 window..
在使用 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 引入,如 geom_vline(xintercept = 0)
。
班次看起来像是从 ?scale_x_continuous()
开始的。它的 expand
参数说,"The defaults are c(0.05, 0) for continuous variables, and c(0, 0.6) for discrete variables.".
所以如果你想消除这个差距,你可以在 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)从 "true" 垂直方向稍微倾斜。在小预览的第一遍中没有看到 window..