【问题标题】:ggplot: add multiline text annotation outside of plotggplot:在绘图之外添加多行文本注释
【发布时间】:2017-09-24 23:17:53
【问题描述】:

我想在ggplot 的绘图区域之外添加一个包含 10 条单独堆叠行的文本框。我的文字是:t = c("a=1", "b=2", "c=3", ... , "j=10"),但这些标签独立于我制作的原始ggplotdata.frame。如何在绘图区域之外添加 10 行?

例如,我想在下图右侧的向量t 周围添加一个文本框:

df = data.frame(y=rnorm(300), test=rep(c(1,2,3),each=100))
t = c("a=1", "b=2", "c=3", "d=4", "e=5", "f=6", "g=7", "h=8", "i=0", "j=10")
p <- ggplot(df, aes(x=factor(test), y=y))
p <- p + geom_violin() + geom_jitter(height=0, width=0.1)
p <- p + theme(legend.title=element_blank(), plot.margin=unit(c(0.1, 3, 0.1, 0.1), "cm"))
p

【问题讨论】:

  • 请提供可重现的示例,以便我们提供针对您的问题量身定制的代码。

标签: r ggplot2 textbox


【解决方案1】:

试试

library(gridExtra)
grid.arrange(p, right = tableGrob(matrix(t,ncol=1),
             theme = ttheme_minimal(padding = unit(c(3,1),"line"))))

【讨论】:

    【解决方案2】:

    您可以使用t 中的标签值创建geom_text 图层,以便将标签打印为图例。但是我们在geom_text 中设置了alpha=0,这样这些标签就不会包含在绘图中,并且我们使用legend.key=element_blank()override.aes(list(size=0)) 来获取打印的“图例”标签(t 值)而没有无意义的传奇钥匙。

    p + 
      geom_text(data = data.frame(t, test=NA, y=NA), aes(label=t, colour=t), alpha=0, x=1, y=1) +
      theme(legend.key=element_blank(),
            legend.margin=margin(l=-10)) +
      guides(colour=guide_legend(override.aes=list(size=0)))
    

    【讨论】:

    • 当我尝试保存时,我收到以下错误:Error: Aesthetics must be either length 1 or the same as the data (1): label, colour
    • 您需要在 geom_text 数据框中具有与 ggplot2 主要调用中用于美学的相同的列(这就是 test=NA, y=NA 的用途)。他们在调用 geom_text 时没有任何目的,但 ggplot 期望他们在那里,所以你需要对你的真实数据做类似的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-03
    • 2018-02-28
    相关资源
    最近更新 更多