以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")
我看到了这个帖子,但无法让它工作: Horizontal bar chart with facets
思想?
答案 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
,则可以看到此信息。我假设这个情节仅仅是为了说明,但我想指出它是完整的。