我正在使用ggplot2
绘制具有极坐标的图。
我想将圆内的背景颜色设置为与圆外的背景颜色不同的颜色。 (原因是我要将绘图转换为栅格并使圆外的区域透明。)
ggplot
的{{1}} theme
属性符合我的期望。但是我似乎找不到找到使plot.background
仅在情节内部绘画的方法。 panel.background
没有element_circle
的类似物。
有人可以建议吗?
这是一个可复制的示例:
element_rect
谢谢!
答案 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
,但我不知道它如何与极坐标一起工作。