【问题标题】:Use math symbols in panel titles for stratigraphic plot在面板标题中使用数学符号绘制地层图
【发布时间】:2016-07-25 02:51:48
【问题描述】:

我想在此地层图的面板标题中包含数学符号:

library(analogue)
data(V12.122)
Depths <- as.numeric(rownames(V12.122))
names(V12.122)

(plt <- Stratiplot(Depths ~ O.univ + G.ruber + G.tenel + G.pacR,
                   data = V12.122,  
                   type = c("h","l","g"),
                   zones = 400))

plt

例如,我想用这个文本代替“O.univ”等:

我使用这段代码来制作该文本:

plot(1, type="n", axes=FALSE, ann=FALSE)
title(line = -1, main = expression(phantom()^14*C~years~BP))
title(line = -3, main = expression(delta^18*O))
title(line = -5, main = expression(paste("TP ", mu,"g l"^-1)))
title(line = -10, main = expression("very long title \n with \n line breaks"))

但如果我尝试更新传递给Stratiplot 的数据框的colnames,则代码不会被解析,并且我们没有得到正确的文本格式:

V12.122 <- V12.122[, 1:4] 
names(V12.122)[1] <- expression(phantom()^14*C~years~BP)
names(V12.122)[2] <- expression(delta^18*O)
names(V12.122)[3] <- expression(paste("TP ", mu,"g l"^-1))

(plt <- Stratiplot(Depths ~ .,
                   data = V12.122,  
                   type = c("h","l","g"),
                   zones = 400))

plt

如何让Stratiplot 解析列名中的表达式并在图中正确格式化它们?

我尝试通过 str(plt) 查看面板标题的存储位置,但没有成功:

text <- expression(phantom()^14*C~years~BP)
plt$condlevels$ind[1] <-  text
names(plt$packet.sizes)[1] <-  text
names(plt$par.settings$layout.widths$panel)[1] <-  text

【问题讨论】:

    标签: r plot lattice


    【解决方案1】:

    在当前版本的 analogue 中实际上无法做到这一点;该函数对数据进行了过多的处理,以使表达式在绘图之前保持未评估状态。我可能会想办法允许表达式作为data 参数对象的names,但只允许用户传递他们想要的变量标签向量会更容易。

    这是github上开发版包中的now implemented,下周初我会推送到CRAN。

    此更改实现了一个新参数labelValues,它采用标签向量来标记顶部轴。这可以是表达式的向量。

    下面是用法说明:

    library("analogue")
    set.seed(1)
    df <- setNames(data.frame(matrix(rnorm(200 * 3), ncol = 3)),
                   c("d13C", "d15N", "d18O"))
    df <- transform(df, Age = 1:200)
    exprs <- expression(delta^{13}*C,  # label for 1st variable
                        delta^{15}*N,  # label for 2nd variable
                        delta^{18}*O)  # label for 3rd variable
    Stratiplot(Age ~ ., data = df, labelValues = exprs, varTypes = "absolute", type = "h")
    

    产生

    请注意,这只是第一步;我敢肯定,如果使用了 sortsvar 等,我没有考虑任何重新排序。

    【讨论】:

    • 总是喜欢在堆栈溢出问题中添加功能。
    【解决方案2】:

    从未使用过格子图,但我认为有机会学习一些东西应该是值得的。花了太长时间才弄清楚。

    text <- "c( expression(phantom()^14*C~years~BP),expression(delta^18*O))"
    
    strip = strip.custom(factor.levels=eval(parse(text=text)))
    
    plt <- Stratiplot(Depths ~ .,
                       data = V12.122[, 1:4],  
                       type = c("h","l","g"),
                       zones = 400, 
                       strip = strip)
    

    希望这能让你开始。

    【讨论】:

    • par.strip.text 的参数有关xyplot?
    • 感谢您的浏览。我不想要条带中的任何文本,我想更改每个面板上方的文本。我看不到这些标签存储在str(plt) 的哪个位置!
    • 它们肯定不在那里,它们在默认Stratiplot 方法中调用xyplot 的可选参数中。发现它使用getAnywhere("Stratiplot.default")仔细阅读包中的代码。
    • 标签是在plt$axis的环境下访问的——代码使用sx的层次,也就是堆叠的数据对象。最好不要摆弄这个——这样做既不容易也不友好。我添加了一个参数,可以让你控制它。答案来了。
    猜你喜欢
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多