gpt4 book ai didi

r - 格子或格子Extra 组合多个不同yscaling 的图(log10 和非转换)

转载 作者:行者123 更新时间:2023-12-04 21:22:36 25 4
gpt4 key购买 nike

我有一个多变量时间序列,其中一些变量的范围相当大。我希望制作一个带有每个变量的多个堆叠图的单页图,其中一些变量具有 log10 y 轴缩放比例。我对格子比较陌生,无法弄清楚如何有效地将 log10 缩放与非转换轴混合并获得出版质量图。如果使用 print.trellis,则绘图未对齐并且填充需要一些工作,如果使用 c.trellis,则布局很好,但仅使用了一个绘图的 y 缩放。任何关于有效解决方案的建议,我可以在其中使用每个(原始)对象的不同 y 缩放复制 c.trellis 的输出?
下面的例子:

    require(lattice)
require(latticeExtra)

# make data.frame
d.date <- as.POSIXct(c("2009-12-15", "2010-01-15", "2010-02-15", "2010-03-15", "2010-04-15"))
CO2dat <- c(100,200,1000,9000,2000)
pHdat <- c(10,9,7,6,7)
tmp <- data.frame(date=d.date ,CO2dat=CO2dat ,pHdat=pHdat)

# make plots
plot1 <- xyplot(pHdat ~ date, data=tmp
, ylim=c(5,11)
, ylab="pHdat"
, xlab="Date"
, origin = 0, border = 0
, scales=list(y=list(alternating=1))
, panel = function(...){
panel.xyarea(...)
panel.xyplot(...)
}
)

# make plot with log y scale
plot2 <- xyplot(CO2dat ~ date, data=tmp
, ylim=c(10,10^4)
, ylab="CO2dat"
, xlab="Date"
, origin = 0, border = 0
, scales=list(y=list(alternating=1,log=10))
, yscale.components = yscale.components.log10ticks
, panel = function(...){
panel.xyarea(...)
panel.xyplot(...)
# plot CO2air uatm
panel.abline(h=log10(390),col="blue",type="l",...)
}
)

# plot individual figures using split
print(plot2, split=c(1,1,1,2), more=TRUE)
print(plot1, split=c(1,2,1,2), more=F)

# combine plots (more convenient)
comb <- c(plot1, plot2, x.same=F, y.same=F, layout = c(1, 2))

# plot combined figure
update(comb, ylab = c("pHdat","log10 CO2dat"))

最佳答案

使用@joran 的想法,我可以使轴更接近但不精确;此外,减少填充会使它们更靠近,但会改变纵横比。在下面的图片中,我可能将填充减少了太多以显示不准确;如果需要关闭,您显然还想删除顶部的 x 轴标签。

我查看了设置布局的代码,左侧的边距是根据标签的宽度计算的,所以@joran 的想法可能是唯一可以基于使用 split 进行打印的方法。 , 除非有人要重写 plot.trellis命令。也许c方法可以工作,但我还没有找到一种方法来根据面板单独设置比例组件。不过,这似乎更有希望。

mtheme <- standard.theme("pdf")
mtheme$layout.heights$bottom.padding <- -10
plot1b <- update(plot1, scales=list(y=list(alternating=1, at=5:10, labels=paste(" ",c(5:10)))))
plot2b <- update(plot2, par.settings=mtheme)
pdf(file="temp.pdf")
print(plot2b, split=c(1,1,1,2), more=TRUE)
print(plot1b, split=c(1,2,1,2), more=F)

enter image description here

关于r - 格子或格子Extra 组合多个不同yscaling 的图(log10 和非转换),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468261/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com