R - xyplot(格子);多重响应(Y轴) - 如何识别各个点?

时间:2016-01-17 21:11:15

标签: r lattice

我生成了一个格子图,其中2个响应变量绘制在单个Y轴上)。我将其中一个响应变量绘制为一条线(下面的Response1),另一个(Response2)作为同一Y轴上的点。我希望能够根据条件('条件')突出显示某些要点(在响应2中),例如,如果条件== 1然后将点颜色更改为蓝色并增加点数大小并更改符号。我希望在同一轴上绘制两个响应变量的事实排除了'组'这个选项,因此,panel.superpose函数(据我所知)。示例代码如下:

library(lattice)
#generate dataframe
TD=data.frame(Response1=rnorm(100,50,5),Response2=rnorm(100,70,5),
Xaxis=seq(1:100),Factor=rep(LETTERS[1:5],20),
Condition=sample(0:1,100,replace=T))
#generate plot          
xyplot(Response1+Response2~Xaxis|Factor,data=TD,distribute.type=TRUE,
type=c('l','p'))
#if(condition==1) then Response2 symbol=blue and size is larger??

我试图通过latticeExtra的doubleYScale绘图(使用' group'参数'在其中一个图中调整条件'条件')但是制作叠加层时会丢失。

对此的任何指导都将非常感激。

此致

汤姆。

2 个答案:

答案 0 :(得分:1)

您可以根据Response2Condition拆分为单独的变量。这是一种方式。

TD = within(TD, {
  R2a=Response2*Condition
  R2b = Response2*(1-Condition)
  R2a[R2a==0]=NA
  R2b[R2b==0]=NA
})

xyplot(Response1+R2a+R2b~Xaxis|Factor,data=TD,distribute.type=TRUE,
type=c('l','p','p'))

然后调整尺寸和颜色以适合您。

答案 1 :(得分:0)

操作输入数据集并不总是令人满意,并且可能会使代码不必要地混淆。相反,您可以创建两个单独的xyplot对象 - 一个具有表示为点和线的响应变量,一个仅包含Condition == 1适用的第二个响应变量的那些点 - 并使用{将它们混合在一起{strong}来自 latticeExtra

as.layer

solution

同样,如果你想修改点符号和大小,我建议创建三个不同的library(latticeExtra) ## grouped plot with lines and points p <- xyplot(Response1 + Response2 ~ Xaxis | Factor, data = TD, distribute.type = TRUE, type = c("l", "p"), as.table = TRUE) ## plot with 'Condition == 1' points only p_cond1 <- xyplot(Response2 ~ Xaxis | Factor, data = subset(TD, Condition == 1), col = "green") ## combine plots p + as.layer(p_cond1) 个对象 - 一个用第一个响应变量表示为行,一个只包含第二个响应变量的那些点xyplot适用于Condition == 0,同样适用于Condition == 1

## grouped plot with lines only
p <- xyplot(Response1 + Response2 ~ Xaxis | Factor, data = TD, 
            distribute.type = TRUE, type = c("l", "p"), as.table = TRUE, 
            col.symbol = "transparent") 

## plot with 'Condition == 0' (or 'Condition == 1') points only
p_cond <- lapply(0:1, function(i) {
  xyplot(Response2 ~ Xaxis | Factor, 
         data = subset(TD, Condition == i), 
         col = ifelse(i == 0, "orange", "darkgreen"), 
         pch = ifelse(i == 0, 1, 2), cex = ifelse(i == 0, 0.8, 1.2))
})

## combine plots
p + 
  as.layer(p_cond[[1]]) + 
  as.layer(p_cond[[2]])

solution2