90

我经常有用于刻面的数值。我希望提供足够的信息来解释补充标题中的这些分面值,类似于轴标题。labeller 选项会重复很多不必要的文本,并且不能用于较长的变量标题。

有什么建议么?

默认值:

test<-data.frame(x=1:20, y=21:40, facet.a=rep(c(1,2),10), facet.b=rep(c(1,2), each=20))
qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

在此处输入图像描述

我想要什么:

在此处输入图像描述

我在ggplot中能做的最好的事情:

qplot(data=test, x=x, y=y)+facet_grid(facet.b~facet.a, labeller=label_both)

在此处输入图像描述

正如@Hendy 所指出的,类似于: 向 ggplot2 绘图添加辅助 y 轴 - 使其完美

4

4 回答 4

50

由于最新的内部ggplot2使用gtable,修改图形非常容易:

library(ggplot2)
test <- data.frame(x=1:20, y=21:40, 
                   facet.a=rep(c(1,2),10), 
                   facet.b=rep(c(1,2), each=20))
p <- qplot(data=test, x=x, y=y, facets=facet.b~facet.a)

# get gtable object
z <- ggplotGrob(p)

library(grid)
library(gtable)
# add label for right strip
z <- gtable_add_cols(z, unit(z$widths[[7]], 'cm'), 7)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 1", rot = -90, gp = gpar(col = gray(1)))),
                     4, 8, 6, name = paste(runif(2)))

# add label for top strip
z <- gtable_add_rows(z, unit(z$heights[[3]], 'cm'), 2)
z <- gtable_add_grob(z, 
                     list(rectGrob(gp = gpar(col = NA, fill = gray(0.5))),
                          textGrob("Variable 2", gp = gpar(col = gray(1)))),
                     3, 4, 3, 6, name = paste(runif(2)))

# add margins
z <- gtable_add_cols(z, unit(1/8, "line"), 7)
z <- gtable_add_rows(z, unit(1/8, "line"), 3)

# draw it
grid.newpage()
grid.draw(z)

在此处输入图像描述

当然,您可以编写一个自动添加条形标签的函数。的未来版本ggplot2可能具有此功能;不过不确定。

于 2012-09-30T09:06:21.980 回答
5

可能有更好的方法,但您可以:

fac1 = factor(rep(c('a','b'),10))
fac2 = factor(rep(c('a','b'),10))
data = data.frame(x=1:10, y=1:10, fac1=fac1, fac2=fac2)
p = ggplot(data,aes(x,y)) + ggplot2::geom_point() + 
facet_grid(fac1~fac2)
p + theme(plot.margin = unit(c(1.5,1.5,0.2,0.2), "cm"))
grid::grid.text(unit(0.98,"npc"),0.5,label = 'label ar right', rot = 270) # right
grid::grid.text(unit(0.5,"npc"),unit(.98,'npc'),label = 'label at top', rot = 0)   # top
于 2017-12-29T15:36:26.630 回答
5

辅助轴现在是一个选项:https ://ggplot2.tidyverse.org/reference/sec_axis.html

# Basic faceted plot
p <- ggplot(mtcars, aes(cyl, mpg)) +
  geom_point() +
  facet_grid(vs ~ am)
    
    # Create a simple secondary axis for the facets (use the appropriate scale_x function)
p + 
  scale_y_continuous(sec.axis = sec_axis(~ . , name = "SECOND Y AXIS", breaks = NULL, labels = NULL)) +
  scale_x_continuous(sec.axis = sec_axis(~ . , name = "SECOND X AXIS", breaks = NULL, labels = NULL))

绘图输出

于 2021-09-11T18:39:55.380 回答
1

除了 kohske 概述的方法之外,您还可以为通过更改添加的框添加边框

col=NA

col=gray(0.5), linetype=1

还有,改变

fill=gray(0.5)

为了

fill=grey(0.8)

gp=gpar(col=gray(1))

gp=gpar(col=gray(0))

如果您希望新条与构面标签匹配

IE

z <- gtable_add_grob(z, 
      list(rectGrob(gp = gpar(col = gray(0.5), linetype=1, fill = gray(0.8))),
      textGrob("Variable 1", rot = -90, gp = gpar(col = gray(0)))),
      4, 8, 6, name = paste(runif(2)))
于 2014-08-21T02:24:06.010 回答