自ggplot2 2.2.0 以来的strip.position
论点facet_wrap()
和switch
论点现在使得通过刻面创建该图的简单版本相当简单。要使绘图具有不间断的外观,请将 设置为 0。facet_grid()
panel.spacing
这是使用数据集的示例,每个类别的组数与@agtudy 的答案不同。
- 我曾经
scales = "free_x"
从没有它的类别中删除额外的组,尽管这并不总是可取的。
- 该
strip.position = "bottom"
参数将分面标签移动到底部。我连同 一起删除了条形背景strip.background
,但我可以看到在某些情况下保留条形矩形会很有用。
- 我曾经
width = 1
使每个类别中的条形触摸 - 默认情况下它们之间有空格。
我还使用strip.placement
and strip.background
intheme
来获取底部的条带并移除条带矩形。
ggplot2_2.2.0 或更新版本的代码:
ggplot(data = data, aes(x = Group, y = Value, fill = Group)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste(Value, "%")), vjust = -0.25) +
facet_wrap(~Category, strip.position = "bottom", scales = "free_x") +
theme(panel.spacing = unit(0, "lines"),
strip.background = element_blank(),
strip.placement = "outside")
如果您希望所有条的宽度相同,则可以使用space= "free_x"
in facet_grid()
,而不管每个类别有多少组。请注意,这使用switch = "x"
而不是strip.position
. 您可能还想更改 x 轴的标签;我不确定它应该是什么,也许是类别而不是组?
ggplot(data = data, aes(x = Group, y = Value, fill = Group)) +
geom_bar(stat = "identity", width = 1) +
geom_text(aes(label = paste(Value, "%")), vjust = -0.25) +
facet_grid(~Category, switch = "x", scales = "free_x", space = "free_x") +
theme(panel.spacing = unit(0, "lines"),
strip.background = element_blank(),
strip.placement = "outside") +
xlab("Category")
旧代码版本
首次引入此功能时,ggplot2_2.0.0 的代码略有不同。我已将其保存在下面以供后代使用:
ggplot(data = data, aes(x = Group, y = Value, fill = Group)) +
geom_bar(stat = "identity") +
geom_text(aes(label = paste(Value, "%")), vjust = -0.25) +
facet_wrap(~Category, switch = "x", scales = "free_x") +
theme(panel.margin = unit(0, "lines"),
strip.background = element_blank())