R:带有facet_grid的水平条形图

时间:2014-09-08 14:27:54

标签: r ggplot2

我试图创建一个多重分组的条形图,但我还没弄清楚如何获得正确的布局。 我创建了一个至少显示正确的东西,但条形是垂直而不是水平。

代码:

sex <- c('F', 'F', 'F', 'F', 'F','M','M','M','M')
type <-c('XL1','XL1','XL1','XL2','XL2','XL2','XL2','XL2','XL2')
ID <- c(1,2,3,4,5,6,7,8,9)
smoke <- c('yes','yes','no','yes','no','yes','no','no','yes')
improved <- c(12,9.8,13,4,7,9,6.5,12.2,-1) 
dat <- as.data.frame(cbind(sex,type,ID,smoke,improved)) 

base <- ggplot(dat, aes(fill = interaction(sex,type,smoke))) +
        geom_bar(position = 'dodge',stat='identity') 
base + aes(x = factor(ID), y=improved) + 
       facet_grid(.~type+sex, scales = "free_x", space = "free")

问题是我有另一个分组变量,除了类型和性别,所有三个变量都在真实数据集长标签中。我可以将它们旋转90度,但我更喜欢将整个图形旋转90度而flip_coord()不起作用...... this thread末尾提到的解决方案并不是很好。另外,因为分组变量位于右侧而不是左侧。

我很感激任何建议。 谢谢,

安雅

1 个答案:

答案 0 :(得分:0)

我很困惑为什么coord_flip()无法工作?

base <- ggplot(dat, aes(fill = interaction(sex,type,smoke))) + geom_bar(position = 'dodge',stat='identity') 
base <- base + aes(x = factor(ID), y=improved) +  facet_grid(.~type+sex, scales = "free_x", space = "free")
base <- base + coord_flip()

您可以使用以下方法调整图例位置:

base <- base + theme(legend.position = "bottom")

给出了: rotated

也许这样的事情会更合适,传说中有两列:

base <- base + theme(legend.position = "bottom") + guides(fill = guide_legend(ncol=2))

给出了: rotated_col_legend