【发布时间】:2012-07-02 21:57:54
【问题描述】:
df <- structure(list(ID = structure(c(1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L,
2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 5L,
5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 7L, 7L, 7L), .Label = c("1",
"2", "3", "4", "5", "6", "7"), class = "factor"), TYPE = structure(c(1L,
2L, 3L, 4L, 5L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L,
1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 4L,
5L, 6L, 1L, 2L, 3L), .Label = c("1", "2", "3", "4", "5", "6",
"7", "8"), class = "factor"), TIME = structure(c(2L, 2L, 2L,
2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L,
2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L,
1L, 1L, 1L), .Label = c("1", "5", "15"), class = "factor"), VAL = c(0.937377670081332,
0.522220720537007, 0.278690102742985, 0.967633064137772, 0.116124767344445,
0.0544306698720902, 0.470229141646996, 0.62017166428268, 0.195459847105667,
0.732876230962574, 0.996336271753535, 0.983087373664603, 0.666449476964772,
0.291554537601769, 0.167933790013194, 0.860138458199799, 0.172361251665279,
0.833266809117049, 0.620465772924945, 0.786503327777609, 0.761877260869369,
0.425386636285111, 0.612077651312575, 0.178726130630821, 0.528709076810628,
0.492527724476531, 0.472576208412647, 0.0702785139437765, 0.696220921119675,
0.230852259788662, 0.359884874196723, 0.518227979075164, 0.259466265095398,
0.149970305617899, 0.00682218233123422, 0.463400925742462, 0.924704828299582,
0.229068386601284)), .Names = c("ID", "TYPE", "TIME", "VAL"), row.names = c(NA,
-38L), class = "data.frame")
如果我创建以下情节:
ggplot(df, aes(x=ID, y=VAL, fill=TYPE)) +
facet_wrap(~ TIME, ncol=1) +
geom_bar(position="stack") +
coord_flip()
然后,我决定最好禁止任何因素显示在没有任何数据的方面。我参考了各种问题和答案,说scale="free" 方法是可行的方法(而不是drop=TRUE,它会丢弃与TIME 中未使用的值相对应的空方面),所以接下来:
ggplot(df, aes(x=ID, y=VAL, fill=TYPE)) +
facet_wrap(~TIME, ncol=1, scale="free") +
geom_bar(position="stack") +
coord_flip()
我的问题是如何防止具有 4 个条形的刻面与具有 3 个条形的刻面发生条形的重新缩放。在这个人为的例子中效果很微妙,我的实际数据更糟。理想的输出将在垂直轴上具有 ID 因子 1、4 和 6 的底部刻面,条形的宽度与顶部刻面的宽度相同,因此刻面的整体垂直尺寸会减小。
如果你能帮助我解释为什么计数而不是数值是堆叠的,那么奖励积分(现已修复)
赏金更新:
正如我在后续question 中提到的,看起来更好的解决方案可能涉及使用ggplot_build 和ggplot_table 并修改gtable 对象。我很确定我可以在给定时间的情况下解决这个问题,但我希望赏金可能会激励其他人帮助我。 Koshke 发布了一些this 的示例。
【问题讨论】:
-
对于奖励点:可能是小写的
y而不是Y,以及stat = "identity"? -
谢谢!不过,不需要身份 arg。
-
facet_wrap的space='free'参数可能是您正在寻找的。之前有一个完美的问题,但用户删除了它...... -
不幸的是,
space="free"不适用于facet_wrap根据文档以及 joran 的回答的 cmets。