ggplot2主题为极坐标内的颜色

时间:2018-07-11 01:23:35

标签: r ggplot2

我正在使用ggplot2绘制具有极坐标的图。

我想将圆内的背景颜色设置为与圆外的背景颜色不同的颜色。 (原因是我要将绘图转换为栅格并使圆外的区域透明。)

ggplot的{​​{1}} theme属性符合我的期望。但是我似乎找不到找到使plot.background仅在情节内部绘画的方法。 panel.background没有element_circle的类似物。

有人可以建议吗?

这是一个可复制的示例:

element_rect

谢谢!

1 个答案:

答案 0 :(得分:4)

这是一个很怪诞的方法:在每个因子水平上创建一个包含最小值和最大值的虚拟数据框,然后用它绘制填充该空间的条形图。将width = 1设置为极坐标将用于制作饼图-在这里它做同样的事情,但是您无法区分饼形楔形。

您实际上可能并不想使用确切的最大值x;您可以根据需要添加一些填充,但这应该是一个开始。

如果您正在处理最小值为0或在其上方某个位置的数据,则无需像我一样重复数据-这是我想出的让条形图从0堆叠到底部的最佳方法。最大值,为正,从0到最小值,为负。 geom_rect最初看起来更有意义,但我无法让它一直延伸到整个圆圈。

library(tidyverse)

set.seed(1234)
df <- data.frame(
  x = rnorm(1000), 
  spoke = factor(sample(1:6, 1000, replace=T))
)
bkgnd_df <- data.frame(spoke = factor(rep(1:6, 2)), 
                      x = c(rep(min(df$x), 6), rep(max(df$x), 6)))

bkgnd_df
#>    spoke         x
#> 1      1 -3.396064
#> 2      2 -3.396064
#> 3      3 -3.396064
#> 4      4 -3.396064
#> 5      5 -3.396064
#> 6      6 -3.396064
#> 7      1  3.195901
#> 8      2  3.195901
#> 9      3  3.195901
#> 10     4  3.195901
#> 11     5  3.195901
#> 12     6  3.195901

ggplot(df, aes(x = spoke, y = x)) +
  geom_col(data = bkgnd_df, width = 1, fill = "skyblue") +
  geom_violin(aes(fill = spoke)) +
  coord_polar(theta = "x")

还值得注意的是ggforce有一个geom_circle,但我不知道它如何与极坐标一起工作。