1

有没有办法指定 acustom_annotation仅适用于 ggplot 的一个方面?

例如,如果我运行以下代码

library(tidyverse)
library(grid)

text_grob=grobTree(textGrob("text",x=0.5, y=0.6, rot=90,
    gp=gpar(col="red")))

ggplot(mtcars, aes(x=mpg, y =drat))+
  geom_point() +
  facet_wrap(~cyl) +
  annotation_custom(overrep_grob)

我明白了

在此处输入图像描述

我怎样才能只保留最右边的红色“文本”注释而不将“文本”注释添加到前两个方面?注意我不能使用geom_text或者annotate因为我需要使用 textGrob 的相对文本定位

4

2 回答 2

3

您也可以geom_text通过计算所需文本的相对位置来执行此操作。请注意,此处的相对位置与您在上面使用的位置略有不同,因为在这里我将相对位置定义为动态范围的某个比例。您可以为 rel 选择不同的值以获得所需的位置。我发现这种方式使定位不那么随意。

library(tidyverse)

rel_pos <- function(.data, var, rel){
  var <- enquo(var)
  .data %>% 
    summarise(x = sum(max(!!var), min(!!var))* rel) %>% .[1, "x"]
}

my_text <- data_frame(mpg = rel_pos(mtcars, mpg, 0.5), 
                      drat = rel_pos(mtcars, drat, 0.6) , 
                      cyl = 8, lab = "text")

ggplot(mtcars, aes(x=mpg, y =drat))+
  geom_point() +
  facet_wrap(~cyl)+
  geom_text(data = my_text, aes(label = lab), color = "red", angle = 90)

reprex 包(v0.2.0)于 2018 年 8 月 15 日创建。

于 2018-08-15T21:29:56.517 回答
1

egggeom_custom

library(ggplot2)
library(grid)
library(egg)

d = data.frame(cyl=6, drat = 4, mpg = 15)
d$grob <- list(textGrob("text",rot=90, hjust = 0, gp=gpar(col="red")))

ggplot(mtcars, aes(x=mpg, y=drat))+
  geom_point() +
  facet_wrap(~cyl) +
  geom_custom(data = d, aes(data = grob), grob_fun = identity)
于 2018-08-15T20:35:34.563 回答