默认情况下,在分面ggplot(facet_grid)上,y轴构面标签位于右侧,y轴断开,标签位于左侧。
可以切换它们吗?
答案 0 :(得分:8)
Koshke写了一段时间,在ggplot2邮件列表上写了一半的笑话:http://groups.google.com/group/ggplot2/browse_thread/thread/5c4658aceea9daf1
d <- data.frame(expand.grid(a=1:2,b=1:2,c=1:2),x=rnorm(8), y=rnorm(8))
p <- ggplot(d, aes(x, y)) + facet_grid(a~b) + geom_point() +
coord_trans(x="reverse", y="reverse") +
opts(strip.text.x=theme_text(angle=180),
strip.text.y=theme_text(angle=90),
axis.text.x=theme_text(angle=180),
axis.text.y=theme_text(angle=180),
axis.title.x=theme_text(angle=180),
axis.title.y=theme_text(angle=180))
print(p, vp=viewport(angle=180))
你显然必须镜像它或“垂直翻转”以获得所需的效果,但我不确定你是如何使用现代图像软件那样做的。
还有... + coord_flip()
将y轴放在底部,x轴放在左边。
答案 1 :(得分:2)
我是根据自己的需要写的。如果你使用switch =“y”,你就完成了一半。
你仍然需要修改它来切换轴,这可能需要更多的工作,因为轴和断点在gtable中形成一列,所以你需要进一步分解它。
switch_facet_strip <- function(p, switch = c("x", "y")) {
require(gtable)
rbind_gtable <- gtable:::rbind_gtable
cbind_gtable <- gtable:::cbind_gtable
if ("y" %in% switch)
p <- p + theme(strip.text.y = element_text(vjust = 0.5, angle = 90))
g <- ggplotGrob(p)
gdim <- as.numeric(g$layout[g$layout$name == "background", c("b", "r")])
tpos <- g$layout[g$layout$name == "strip-top", "b"][1]
rpos <- g$layout[g$layout$name == "strip-right", "r"][1]
new_tpos <- g$layout[g$layout$name == "axis-b", "b"][1] + 1
new_rpos <- g$layout[g$layout$name == "axis-l", "r"][1] - 1
if ("x" %in% switch) {
g <- rbind_gtable(
rbind_gtable(
gtable_add_rows(
rbind_gtable(g[1:tpos-1, ] , g[(tpos+1):(new_tpos-1), ], "first"),
unit(5, units = "mm")),
g[tpos, ], "first"),
g[new_tpos:gdim[1], ], "first")
}
if ("y" %in% switch) {
g <- cbind_gtable(
cbind_gtable(
gtable_add_cols(
cbind_gtable(g[, 1:new_rpos], g[, rpos], "first"),
unit(5, units = "mm")),
g[, (new_rpos+2):rpos-1], "first"),
g[, (rpos+1):gdim[2]], "first")
}
grid.newpage()
grid.draw(g)
}
注意:这个hack允许我切换各自轴标签旁边的两个条带。只有在使用条带没有背景的主题时才有意义。我认为这是显示构面标签的正确方法,因为它允许像多路表一样读取图形。此外,小平面标签紧邻轴断裂,这使得轴代表的更加明显。其他人认为这有道理吗?我希望它是ggplot中的一个选项。
答案 2 :(得分:0)
由于ggplot2基于网格图形,使用gridExtra包,您可以在ggplot中“切换”侧面的小平面条。这种方法唯一的痛苦是手动确定坐标。对于文本。
# Some data
d <- data.frame(expand.grid(a=1:2,b=1:2,c=1:2),x=rnorm(8), y=rnorm(8))
# ggplot
p <- ggplot(d, aes(x, y)) +
geom_point() +
facet_grid(a~b) +
xlab("") +
ylab("") +
theme(strip.background = element_blank(),
strip.text = element_blank())
# Add x and y labels
p <- arrangeGrob(p, sub = textGrob(label = c("1", "2"), x = c(0.29, 0.73),
hjust = -0.1, vjust = -0.8, gp = gpar(fontsize = 10)), left = textGrob(label =
c("1", "2"), y = c(0.27, 0.70), hjust = 0, vjust = 1.8,
gp = gpar(fontsize = 10, lineheight = 0.5), rot = 90))
# View
p