通过忽略零长度变量来最小化ggplot图的绘图大小

时间:2012-02-28 23:04:18

标签: r ggplot2

我有一个数据框,我想以与ggplot2 bar-plot page上的一个示例类似的方式绘制。例如:

ggplot(diamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity)

我的问题是,在钻石数据集中,没有理想的切割VV21净度钻石:

newdiamonds <- diamonds[diamonds$clarity != "VVS2" & diamonds$cut != 'Ideal', ]
ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity)

如果绘制此图,即使没有要绘制的条,“理想”位置仍然存在。是否可以抑制这个未使用空间的绘制?在这种情况下它没用,但在我的情况下,我有两列变量 - 'data'和'grouping'。我想面对“分组”并按“数据”显示。对于“分组”组,其中“数据”的成员没有值,我不希望ggplot绘制它。


修改

根据两个答案,我正在寻找一个看起来像这样的图表:

ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + coord_flip() + facet_grid(clarity~.)

但是每个组中可能只有一个或多个'cut'属性。 enter image description here

2 个答案:

答案 0 :(得分:4)

ggplot绘制因子的所有级别,无论数据集中是否出现级别。在对数据集进行子集化之后,您需要删除未使用的因子级别“理想”:

library(ggplot2)
newdiamonds <- diamonds[diamonds$clarity != "VVS2" & diamonds$cut != 'Ideal', ]
newdiamonds$cut <- newdiamonds$cut[, drop=TRUE]
ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity) +
  opts(axis.text.x=theme_text(angle=90, hjust=1))

ggplot2 drop factor levels

答案 1 :(得分:3)

或者,您可以将参数scales='free'添加到facet_grid来电。

ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity, scales='free')

但我会选择另一个答案,他只是写得更快!