【问题标题】:Tikz output with GNU R with special Latex characters and ggplot2带有特殊乳胶字符和 ggplot2 的 GNU R 的 Tikz 输出
【发布时间】:2020-10-15 07:52:41
【问题描述】:

在 GNU R 中使用 ggplot2 创建绘图后,我经常需要将绘图另存为 TIKZ 和 PNG。

必须在图例或轴标题中转义特殊的 LaTeX 字符。如果我保存这两个图,那么我最终会在 PNG 输出中出现垃圾(示例 1),或者如果未转义特殊字符(示例 2),则不会输出 TIKZ。

明显的解决方案是有一个条件来决定如何格式化(转义或不转义)字幕。这里如何避免代码重复?

示例 1:

attach(all)
p <- ggplot(data = all, aes(x = Time, y = Concentration, color = Status)) + geom_line() + geom_point()
p <- p + labs(subtitle="50\\% reduction")
ggsave(filename="test.png")
detach(all)

tikz(file=paste(sub('\\.[^\\.]*$', '', outputname), ".tex", sep=""))

示例 2:

attach(all)
p <- ggplot(data = all, aes(x = Time, y = Concentration, color = Status)) + geom_line() + geom_point()
p <- p + labs(subtitle="50% reduction")
ggsave(filename="test.png")
detach(all)

tikz(file=paste(sub('\\.[^\\.]*$', '', outputname), ".tex", sep=""))

【问题讨论】:

    标签: r ggplot2 latex tex tikz


    【解决方案1】:

    您应该编写一个函数来处理这个问题。你没有说你是如何决定是输出 TIKZ 还是 PNG,但我假设你可以产生一个布尔值 tikz 来描述这个决定。然后像这样添加你的字幕:

    escapeIfTikz <- function(s, tikz = ...) {
      if (tikz)
        gsub("([$%])", "\\\\\\1", s)  # add other necessary escapes
      else
        s # Do nothing for PNG
    }
    
    p <- p + labs(subtitle=escapeIfTikz("50% reduction"))
    

    【讨论】:

    • 是的,我可以这样做,但这需要多个 escapeIfTikz(...) 声明 - 是否存在整体可能性?
    • 在陈述你想做的事情时有什么不是“整体”的?如果您反对输入的数量,您可以缩短名称,或者在为您自动完成的编辑器中工作,或者编写一个包装函数来代替labs()
    • 这是一个很好的观点。我暂时找不到比这更好的方法了。
    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多