当使用两个变量进行构面时,分别在qplot上注释每个构面

时间:2014-08-20 03:46:04

标签: r ggplot2 facet annotate

我正在制作一个带有4个面的刻面图,使用两个变量,每个变量有2个级别来定义构面。

我正在使用这样的代码:

qplot(hp, mpg, data=mtcars, 
  facets=vs~am, size=I(3), geom=c("point","smooth"),
  xlab="Horsepower", ylab="Miles per Gallon")

我正在尝试在每个方面放置一个唯一的标签,上面写着" Slope = 线的斜率"

我在这里看到了一些问题,这些问题描述了当facet被一个变量定义时,如何做到这一点,而不是2.如何添加唯一标签?

我知道我可以使用geom_text,类似这样的

geom_text(sig=c("Slope = 1","Slope = 2","Slope = 3","Slope = 4")),aes(x=4.5,y=1,label=sig))

2 个答案:

答案 0 :(得分:2)

尝试:

mtcars$slope = with(mtcars, ifelse(am & vs, 1, ifelse(am,2, ifelse(vs, 3, 4))))

ggplot(data=mtcars)+
    geom_point(aes(x=hp, y=mpg))+
    facet_grid(vs~am)+
    labs(x="Horsepower", y="Miles per gallon")+
    geom_text(aes(x=250,y=50,label=paste("slope=",slope)))

enter image description here

答案 1 :(得分:0)

我还发现了一个方法here,它允许您更改其中一个标签的放置位置。也就是说,并非所有的实验室都必须处于相同的x,y坐标。

mtcars[, c("cyl", "am", "gear")] <- lapply(mtcars[, c("cyl", "am", "gear")], as.factor)

attach(mtcars)

p <- qplot (hp, mpg, facets=vs~am, size=I(3), xlab="hp", ylab="mpg")

len <- length(levels(mtcars$vs)) *  length(levels(mtcars$am))
vars <- data.frame(expand.grid(levels(mtcars$vs), levels(mtcars$am)))
colnames(vars) <- c("vs", "am")
dat <- data.frame(x = 300, y = 50, vars, labs=LETTERS[1:len])

p <- p + geom_text(aes(x, y,
    label=c("Slope = 1","Slope = 2","Slope = 3","Slope = 4"),
    group=NULL), data=dat)

p

更改一个特定标签的位置:

dat[1, 1:2] <- c(200, 20)   #to change specific locations
p