2016-01-17 122 views
1

我生成了一個格子圖,其中2個響應變量繪製在單個Y軸上)。我將其中一個響應變量繪製爲一條線(下面的Response1),另一個(Response2)繪製爲同一Y軸上的點。我希望能夠根據條件('條件')突出顯示某些點(在「響應2」中),例如,如果條件== 1,則將點顏色更改爲藍色並增加磅值並更改符號。我希望在同一個軸上繪製兩個響應變量的事實排除了此組的'Group'選項,並因此排除了panel.superpose函數(據我所知)。下面的示例代碼給出:多重響應(Y軸) - 如何識別單個點?

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圖(「在情節上調理的一個‘條件’使用「組」參數)要做到這一點,但這時丟失覆蓋被製成。

任何有關這方面的指導將不勝感激。

Regards

Tom。

回答

1

您可以根據Condition分裂Response2成獨立的變量。這是一種方法。

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')) 

然後調整大小和顏色以適合您。

0

操作輸入數據集並不總是可取的,並且可能會使您的代碼不必要地混淆。相反,您可以創建兩個單獨的對象 - 一個具有用點和線表示的響應變量,一個僅包含Condition == 1適用的第二個響應變量的點 - 並使用as.layerlatticeExtra將它們混合在一起。

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) 

solution

同樣,如果你想修改點符號和大小,我建議創建三個不同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