【问题标题】:Alternative to Vector of Plotmath ExpressionsPlotmath 表达式向量的替代方案
【发布时间】:2016-01-13 00:03:06
【问题描述】:

我试图用 10^n 的值在每第三个刻度处标记一个轴,格式为上标。我正在使用grid 图形。我正在做一些事情。这是一个 MWE(或者我看到有人称它为 reprex):

library("grid")
grid.newpage()
axisVP <- viewport(width = unit(6, "inches"), height = unit(0.01, "inches"))
pushViewport(axisVP)
labs <- c(1, "", "", expression(10^{-3}), "", "", expression(10^{-6}), "", "",
   expression(10^{-9}), "", "", expression(10^{-12}))
grid.xaxis(at = seq(0, 1, length.out = 15)[-c(1,15)], label = labs)

但是,这仅将第一个刻度标记为 1。查看str(labs),它是一个长度为 13 的表达式,正如预期的那样。 grid.xaxis 接受表达式。所以我不太确定为什么只显示第一个值。我已经探索了关于 SO 的相关问题,但大多数似乎都将单个表达式处理为轴标签或标题,而不是一系列表达式。大多数处理轴标签的问题都试图使用专门的函数来标记每个刻度。

【问题讨论】:

    标签: r r-grid plotmath


    【解决方案1】:

    这是我要做的:

    library(grid)
    grid.newpage()
    axisVP <- viewport(width = unit(6, "inches"), height = unit(0.01, "inches"))
    pushViewport(axisVP)
    
    ## First plot an axis with all ticks and no labels
    ticks_at <- seq(1/15, 14/15, length.out=13)
    grid.xaxis(at = ticks_at, label=FALSE)
    
    ## Then add labels where you want them
    labs <- parse(text=c("1", "10^{-3}", "10^{-6}", "10^{-9}", "10^{-12}"))
    ## Alternatively, use this, though in practice it's more cumbersome
    # labs <- c(expression(1), expression(10^{-3}), expression(10^{-6}), 
    #           expression(10^{-9}), expression(10^{-12}))
    labs_at <- seq(1/15, 14/15, length.out=5)
    grid.xaxis(at = labs_at, label = labs)
    

    【讨论】:

    • 谢谢! parse 和 text 有一些魔法,我必须学习。我也很欣赏您传达序列的替代(并且在概念上更优越)方式。并且通常更精简的代码。
    • 不客气!要了解 parse() 在此上下文中所做的事情,请参阅 R 语言定义中的 here 和 here。 (事实证明,这是极少数你应该使用parse() 来构造 R 语言对象的情况之一。有关更好的替代方案,请参阅Computing on the Language 部分。)
    • (值得注意的是,如果您希望某些表达式不打印任何内容,则需要将它们设置为类似phantom(.)。)
    • 我确实在过于复杂的labs 原始版本中尝试了phantom(),但它的效果与空引号相同。感谢您提供额外的参考资料。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 2018-03-22
    • 1970-01-01
    • 2014-05-05
    • 2017-06-14
    • 1970-01-01
    相关资源
    最近更新 更多