在@Justin的帮助下,我在另一篇文章中使用ggplot2中的facet_grid
选项绘制了模拟结果。包含数据和答案的帖子位于:Use facet_grid option to plot column of dataframe with ggplot2
这里是原始样本数据的副本,其中添加了有关每种参数类型的scale_x min和max值的信息:
dat <- read.table(textConnection("P1 P2 P3 P4 R
1 2e-5 1.0 0.6 3 1
2 4e-6 1.5 0.7 1.5 2
3 6e-7 1.2 0.6 2.5 3
4 8e-8 1.45 0.65 3.2 4
"))
scalx <- read.table(textConnection("P XMIN XMAX
1 1 10e-1 10e-10
2 2 0.5 3.0
3 3 0.0 1.5
4 4 2.0 5.0
"))
@justin给出的实际示例绘图代码:
library(ggplot2)
library(reshape2)
dat.melt <- melt(dat, id.vars='R')
ggplot(dat.melt, aes(x=0, y=value)) +
geom_boxplot() +
geom_point(aes(colour=factor(R))) +
facet_wrap(~variable, ncol=1, scales='free') +
coord_flip()
但是现在,我的项目是制作一部电影来展示多个模拟结果的演变,此时借助上面给出的代码,我获得了这样的伟大图形。
为了实现这一点,我需要修复每个方面的值,因为每个参数的范围可以在固定的极值之间,尽管这些值是从facet到facet的变化。
您是否知道facet_grid
是否可行,因为我最近发现此问题与在github ggplot2项目存储库中指定不同方面的不同限制有关:https://github.com/hadley/ggplot2/issues/187。还有另一种替代解决方案可以实现这一目标吗?
答案 0 :(得分:2)
由于您希望扩展每个方面的比例(而不是限制/收缩它们),因此有可能。您需要将scalx
重塑为与融化dat
类似的格式:
xlims <- melt(scalx, id.vars="P")
xlims$P <- paste0("P", xlims$P)
names(xlims)[1] <- "variable"
除melt
之外,我使facet具有相同的格式和变量名称。然后可以将这个新数据框提供给geom_blank
图层,以便它影响比例的限制,但实际上并没有绘制任何内容:
ggplot(dat.melt, aes(x=0, y=value)) +
geom_boxplot() +
geom_point(aes(colour=factor(R))) +
geom_blank(data=xlims) +
facet_wrap(~variable, ncol=1, scales='free') +
coord_flip()
作为旁注,您的P4
列为最少2,但实际上数据点为1.5。这表明这种方法只会扩大规模,而不是收缩它们。