在面板标题中使用数学符号绘制地层图

Use math symbols in panel titles for stratigraphic plot

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

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 的数据框的名称,代码不会被解析,我们也不会得到正确的文本格式:

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 解析 colnames 中的表达式并在绘图中正确格式化它们?

我尝试浏览 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

从未使用过点阵图,但我认为有机会学习一些东西是值得的。花了太长时间才弄明白。

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)

希望这能让你入门。

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 等的任何重新排序,如果它们被使用的话。