整个facet_grid的极坐标/圆形布局

时间:2015-09-30 10:45:19

标签: r ggplot2 facet

我有一个数据集,其值为2个有序离散因子,并带有一些相应的连续值。 (随机样本在下面生成)

randomData = expand.grid(1:5, 1:100)    # The two discrete variables
colnames(randomData) = c("index1", "index2")

randomData$z = runif(nrow(randomData))   # The measured value 

ggplot(randomData, aes(x = 1, y = z)) + 
  geom_bar(stat = "identity") + 
  facet_grid(index1 ~ index2) + 
  theme_minimal()

enter image description here

我正在尝试使用生成的条形图将整个网格包装成圆形/极坐标布局,例如下面显示的布局。

第一个图是所需的输出(由第一个构面图中的照片编辑工具操纵)。 第二个图是此博客文章的输出:http://chrisladroue.com/2012/02/polar-histogram-pretty-and-useful/)。但是,它只包含一个"行"。

enter image description here enter image description here

我无法找到一种方法。当我尝试添加coord_polar()时,条形图本身会受到影响,而不是方面。

1 个答案:

答案 0 :(得分:4)

我认为您不能在一个圆圈中排列方面,但您可以通过更改x和y变量然后使用coord_polar()来作弊。

library(ggplot2)
library(dplyr)
d <- rbind(
    mutate(randomData, col = "dark"), 
    mutate(randomData, col = "blank", z = 1 - z)
) %>% arrange(d, index2, index1, col)

ggplot(d, aes(x = factor(index2), y = z)) + 
   geom_bar(aes(fill = col), stat = "identity", position = "stack") + 
   scale_fill_manual(values = c(blank = "white", dark = "black")) + 
   coord_polar() + 
   theme_minimal() + 
   guides(fill = FALSE)

enter image description here

你必须适应这一点以适应原始数据集,但你明白了 - 为值(1-z)添加行并使用它们来堆叠条