0

根据其他人的评论,这篇文章已经 从这个 OP的先前版本中分成了几个较小的问题。

在下图中,你能帮我吗(新手到 R)

  • 根据它们所代表的数据的自定义图例,如为变量 1 填充、为变量 2 填充圆点、为变量 3 提供线条及其颜色。
  • 图例和轴名称的字母大小相同。

下图是使用 pdf 设备中的数据生成的,具有以下布局。

m <- matrix(c(1,2,3,3,4,5),nrow = 3,ncol = 2,byrow = TRUE)
layout(mat = m,heights = c(0.47,0.06,0.47))
par(mar=c(4,4.2,3,4.2))

#Codes for Fig A and B
...

#Margin for legend
par(mar = c(0.2,0.2,0.1,0.1))
    # Code for legend
...

#Codes for Fig C and D
...

来自 R 的图表

4

2 回答 2

2

使用 doubleYScalefromlatticeExtra和长格式的数据(请参阅我之前的答案),您可以简化工作:

  1. 无需创建自定义布局来叠加许多图
  2. 无需手动创建图例

在此处输入图像描述

这个想法是创建 2 个单独的对象,然后使用doubleYScale. 后者将创建第二个轴。我希望我能得到你的 ploygon 想法,因为目前还不清楚你为什么要在你的 OP 中反转它。

library(latticeExtra)
obj1 <- xyplot(Variable~TimeVariable|Type,type='l',
               groups=time,               scales=list(x=list(relation='free'),
                                                      y=list(relation='free')),
               auto.key=list(columns = 3,lines = TRUE,points=FALSE) ,

       data = subset(dat.l,time !=1))
obj2 <- xyplot(Variable~TimeVariable|Type,
               data = subset(dat.l,time ==1),type='l',
               scales=list(x=list(alternating=2),
                           auto.key=list(columns = 3,lines = TRUE,points=FALSE),
                           y=list(relation='free')),
               panel=function(x,y,...){
         panel.xyplot(x,y,...)
         panel.polygon(x,y,col='violetred4',border=NA,alpha=0.3)
               })


doubleYScale(obj1, obj2, add.axis = TRUE,style1 = 0, style2 = 1)
于 2013-06-16T00:26:22.857 回答
1

尝试以下操作:

1) 对于图例部分

数据可以在https://www.dropbox.com/s/4kgq8tyvuvq22ym/stackfig1_2.csv找到

我使用的代码如下:

data <- read.csv("stackfig1_2.csv")
library(Hmisc)

label1=c(0,100,200,300)
plot(data$TimeVariable2C,data$Variable2C,axes=FALSE,ylab="",xlab="",xlim=c(0,24),
     ylim=c(0,2.4),xaxs="i",yaxs="i",pch=19)
lines(data$TimeVariable3C,data$Variable3C)
axis(2,tick=T,at=seq(0.0,2.4,by=0.6),label= seq(0.0,2.4,by=0.6))
axis(1,tick=T,at=seq(0,24,by=6),label=seq(0,24,by=6))
mtext("(C)",side=1,outer=F,line=-10,adj=0.8)
minor.tick(nx=5,ny=5)

par(new=TRUE)
plot(data$TimeVariable1C,data$Variable1C,axes=FALSE,xlab="",ylab="",type="l",
     ylim=c(800,0),xaxs="i",yaxs="i")
axis(3,xlim=c(0,24),tick=TRUE,at= seq(0,24,by=6),label=seq(0,24,by=6),col.axis="violetred4",col="violetred4")
axis(4,tick=TRUE,at= label1,label=label1,col.axis="violetred4",col="violetred4")
polygon(data$TimeVariable1C,data$Variable1C,col='violetred4',border=NA)


legend("top", legend = c("Variable A","Variable B","Variable C"), col = c("black","violetred4","black"),
       ncol = 2, lwd =c("","",2),pch=c(19,15,NA),cex=1)

输出如下:

在此处输入图像描述

2)要使字体大小相同,请使用该参数cex并使其在任何地方都相同。

于 2013-06-15T22:32:21.037 回答