【发布时间】:2022-01-19 08:45:21
【问题描述】:
我想绘制具有相同宽度的条形图。这是我的最小示例代码:
data <- data.frame(A = letters[1:17],
B = sample(1:500, 17),
C = c(rep(1, 5), rep(2, 6), rep(c(3,4,5), each = 2)))
ggplot(data,
aes(x = C, y = B, label = A,
fill = A)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(position = position_dodge(width = 0.9), angle = 90)
条形的宽度取决于变量C 中给出的组中观察的数量。我希望每个条具有相同的宽度。
facet_grid(~C) 有效(条的宽度相同)这不是我的意思:
ggplot(data,
aes(x = C, y = B, label = A,
fill = A)) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(position = position_dodge(width = 0.9), angle = 90) +
facet_grid(~C)
我想要的是像第一张图片一样绘制,但条形的宽度独立于C 列中每个级别的观察次数。我该怎么做?
[编辑] geom_bar(width) 改变了条形组的宽度,但第五组的条形仍然比第一组宽,所以这不是我问题的答案。
【问题讨论】:
-
我不知道如何在不更改
aes(x = )的情况下做到这一点。如果您的geom_bar()中的观测值数量不均匀,则该函数会将单个观测值的宽度限制为组的宽度,以便所有观测值都可见。 -
试试这个:stackoverflow.com/questions/11020437/…。因此,对于您的数据,您必须像这样转换它:
dat.all <- rbind(data[,c(1,3,2)], cbind(expand.grid(A=levels(data$A),C=levels(data$C)), B=NA))但我认为分面网格是更好的选择。 -
致未来的自己:如果问题是
how to have a fixed width in geom_bar with position_dodge?,请直接从手册中尝试这个geom_bar(position = position_dodge(preserve = "single"))。 [未经测试 OP 的问题]