使用facet_grid的水平条形图,free_x无法正常工作

时间:2016-10-30 21:56:24

标签: r ggplot2

mpg数据集为例,我想使用facet_grid(),其中每个制造商下只列出相关的模型。

此代码似乎有效(左图)

library(ggplot2)
qplot(cty, model, data=mpg) +
  facet_grid(manufacturer ~ ., scales = "free", space = "free")

但是这个没有(右)

ggplot(mpg) +
  geom_bar(aes(x = model, y = cty), stat = "identity") +
  coord_flip() +
  facet_grid(manufacturer ~ ., scales = "free", space = "free")

enter image description here

我看到了这个帖子,但无法让它工作: Horizontal bar chart with facets

思想?

1 个答案:

答案 0 :(得分:4)

TL; DR:space="free"scales="free"不适用于coord_flip。相反,请使用geom_barh包中的ggstance(水平条geom),这样就无需coord_flip。详情如下。

space="free"scales="free"不适用于coord_flip。这与绘制点无关,因为使用点可以切换x轴和y轴,geom_point仍然有效,无需coord_flip。但是,geom_bar期望值为y变量,类别为x变量,因此您需要使用coord_flip获取水平条。

要避免coord_flip,您可以使用geom_barh包中的水平横幅ggstance,以便free中的facet_grid空格和比例设置工作:

library(ggplot2)
library(ggstance)

ggplot(data=mpg, aes(x=cty, y=model)) +
  geom_barh(stat="identity") +
  facet_grid(manufacturer ~ ., scales = "free_y", space = "free_y")

请注意,上面的代码会创建一个堆积条形图,其中给定cty的所有汽车的model mpg值叠加在另一个上面,这是非感性的。例如,如果您在colour="green"内设置geom_barh,则可以看到此信息。我假设这个情节仅仅是为了说明,但我想指出它是完整的。

enter image description here