【问题标题】:Add filename or other annotation to ggplot figures向 ggplot 图形添加文件名或其他注释
【发布时间】:2014-04-27 11:06:51
【问题描述】:

我使用 ggplot 制作大部分图形。这些可以是单面板,也可以是多面的。为了更容易跟踪修订,我想在绘图的角落生成一个包含一些文本的小标签。

在伪代码中,我正在寻找这样的东西:

# generate the initial plot
p <- ggplot()
# add the label
p + someAnnotationFunction(label = "Version 1.0", x = 1, y = 0, 
                           hjust = "right", vjust = "bottom" )
# print
print(p) 

或者:将我的标签绘制在图形的右下角,而不会弄乱现有的 ggplot 图形。

到目前为止,我没有任何运气找到解决方案。如果您有完整的m x n 分面表,This(非常有趣)方法将不起作用。使用gridExtra 的方法往往会过多地混淆绘图。那么,有没有人可以在使用 ggplot 生成的图的任意位置添加任意文本?

【问题讨论】:

  • annotate 可能就是你要找的东西
  • @hrb 好主意,但annotate() 同时适用于所有方面。如果可能的话,即使我有很多方面,我也想要一个标签。
  • 错过了那部分。道歉。那么This 可能就是你所需要的。
  • 在什么意义上 gridExtra 与情节混淆?我正要suggest thisgrid.arrange(qplot(1,1), sub="Version 1.0")
  • @baptiste 它不允许直接覆盖(据我所知)。但它完成了我需要的工作,而且非常可定制。 This 对保存生成的图形有很大帮助。如果您将此添加为答案,我会接受。或者,将我的问题标记为重复!

标签: r ggplot2


【解决方案1】:

根据 Baptiste 的评论,这是一个使用 gridExtra() 的有效解决方案:

require("ggplot2")
require("gridExtra")

# set our working directory 
working.dir <- '/Users/aclifton/Documents/projects/Rcode' 
setwd(working.dir)

# create a data frame
df <- data.frame(x =runif(100, 1, 10),
                 y = runif(100, 1, 10))
#create a plot
p <- ggplot(data = df,
            aes(x = x,
                y = y)) +
  geom_point()

print(p)        

我们现在有了我们的情节,诀窍是添加该标签并使用ggsave()保存整个情节:

# label to show
sub.label = textGrob("Some kind of label", 
               gp=gpar(fontsize=6),
               x = unit(1, "npc"),
               hjust = 1,
               vjust = 0)

ggsave(filename=file.path(working.dir,'DemoPlot.png'),
       plot = arrangeGrob(p,
                          sub = sub.label,
                          clip = FALSE),
       scale = 1,
       width = 6.5,
       height = 3.5, 
       units = c("in"),
       dpi = 300)

这给了你这个:

【讨论】:

    【解决方案2】:

    通过制作注释的数据框,您可以使用 geom_text 将它们添加到绘图顶部。

    note <- data.frame(xVarName = c(1, 5), yVarName = c(1, 10), 
        text = c("Version 1.0", "April 26, 2014")
    
     p + geom_text(data = anno, aes(label = text))
    

    “1.0 版”将显示在左下角,“2014 年 4 月 26 日”将显示在右上角。

    通过在单独的数据框中制作笔记,您可以根据需要将多个笔记添加到一个图表中。

    【讨论】:

    • 如果您有分面,在注释数据框中添加与分面关联的变量将允许分面单独注释。
    • 好主意。我喜欢这种方法,它更接近直接覆盖标签的想法,但它不如 gridExtra 中包含的功能灵活。
    猜你喜欢
    • 2013-09-09
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    相关资源
    最近更新 更多