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

时间:2016-07-25 02:51:48

标签: r plot lattice

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

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

enter image description here

例如,我希望用这个文字代替&#34; O.univ&#34;等:

enter image description here

我使用此代码制作该文字:

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

enter image description here

如何让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

2 个答案:

答案 0 :(得分:4)

您无法在当前版本的模拟中实际执行此操作;在绘图之前,表达式保持未评估的数据太多了。我可能想出这一点,允许表达式作为names参数对象的data,但更容易让用户传递他们想要的变量标签向量。

这是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")

产生

enter image description here

请注意,这只是第一次通过;我非常确定,如果使用sortsvar等,我仍然无法解决任何重新排序问题。

答案 1 :(得分:1)

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

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)

enter image description here

希望这能让你开始。