我有一个数据框,我想以与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'属性。
答案 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))
答案 1 :(得分:3)
或者,您可以将参数scales='free'
添加到facet_grid
来电。
ggplot(newdiamonds, aes(cut, fill=cut)) + geom_bar() + facet_grid(. ~ clarity, scales='free')
但我会选择另一个答案,他只是写得更快!