当我进行实验设计时,我使用ggplot来显示布局.这是一个简单的例子:
df <- data.frame(Block=rep(1:2, each=18),
Row=rep(1:9, 4),
Col=rep(1:4, each=9),
Treat=sample(c(1:6),replace=F))
Run Code Online (Sandbox Code Playgroud)
我将描绘如下:
df.p <- ggplot(df, aes(Row, Col)) + geom_tile(aes(fill=as.factor(Treat)))
Run Code Online (Sandbox Code Playgroud)
给:

有时我在设计中有一个结构我想通过在它周围放一个框来强调,例如主图.在这种情况下:
df$Mainplot <- ceiling(df$Row/3) + 3*(ceiling(df$Col/2) - 1)
Run Code Online (Sandbox Code Playgroud)
然后我使用geom_rect和一些需要调整每个设计的混乱代码来生成类似的东西:

问题:如何以简单的方式在主图周围添加矩形?这似乎是一个简单的问题,但我还没有找到一个明显的方法.我可以将颜色或其他美学映射到主图,但我似乎无法用一个盒子包围它们.任何指针都非常感激.
这是一个可能的解决方案,其中我创建了一个辅助data.frame来使用绘制边框geom_rect()。我不确定这是否像您想要的那么简单!我希望计算矩形坐标的代码将在不费吹灰之力的情况下就可以重用/可生成。
library(ggplot2)
# Load example data.
df = data.frame(Block=rep(1:2, each=18),
Row=rep(1:9, 4),
Col=rep(1:4, each=9),
Treat=sample(c(1:6),replace=F))
df$Mainplot = ceiling(df$Row/3) + 3*(ceiling(df$Col/2) - 1)
# Create an auxiliary data.frame for plotting borders.
group_dat = data.frame(Mainplot=sort(unique(df$Mainplot)),
xmin=0, xmax=0, ymin=0, ymax=0)
# Fill data.frame with appropriate values.
for(i in 1:nrow(group_dat)) {
item = group_dat$Mainplot[i]
tmp = df[df$Mainplot == item, ]
group_dat[i, "xmin"] = min(tmp$Row) - 0.5
group_dat[i, "xmax"] = max(tmp$Row) + 0.5
group_dat[i, "ymin"] = min(tmp$Col) - 0.5
group_dat[i, "ymax"] = max(tmp$Col) + 0.5
}
p2 = ggplot() +
geom_tile(data=df, aes(x=Row, y=Col, fill=factor(Treat)),
colour="grey30", size=0.35) +
geom_rect(data=group_dat, aes(xmin=xmin, xmax=xmax, ymin=ymin, ymax=ymax),
size=1.4, colour="grey30", fill=NA)
ggsave(filename="plot_2.png", plot=p2, height=3, width=6.5)
Run Code Online (Sandbox Code Playgroud)

| 归档时间: |
|
| 查看次数: |
1492 次 |
| 最近记录: |