我生成了一个格子图,其中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'参数'在其中一个图中调整条件'条件')但是制作叠加层时会丢失。
对此的任何指导都将非常感激。
此致
汤姆。
答案 0 :(得分:1)
您可以根据Response2
将Condition
拆分为单独的变量。这是一种方式。
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
同样,如果你想修改点符号和大小,我建议创建三个不同的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]])