在coplot {graphics}中添加一行,经典方法不起作用

时间:2015-10-13 03:39:41

标签: r graph plot lattice

我发现coplot {graphics}对我的情节非常有用。但是,我想在那里不仅包括一行,而是在那里添加另一行。对于基本图形,我只需要add = TRUE添加另一行,或者使用plot(..)lines(..).对于{lattice}我可以将我的图保存为对象

a<-xyplot(..)
b<-xyplot(..)

并只显示a + as.layer(b)。这些方法中没有一种适用于coplot(),显然是因为创建a<-coplot()对象并不会产生trellis图形但是NULL对象。

请帮忙如何在coplot()中添加数据线?我非常喜欢它的图形所以我希望保留它。谢谢!!

我的exemle数据在这里:http://ulozto.cz/xPfS1uRH/repr-exemple-csv

我的代码:

sub.tab<-read.csv("repr_exemple.csv", , header = T, sep = "")

attach(sub.tab) 

cells.f<-factor(cells, levels=c(2, 25, 100, 250, 500),      # unique(cells.in.cluster)???
    labels=c("size2", "size25", "size100", "size250", "size500"))

perc.f<-factor(perc, levels=c(5, 10),      # unique(cells.in.cluster)???
    labels=c("perc5", "perc10"))

# how to put these plots together?
a<- coplot(max_dist ~ time |cells.f  + perc.f, data = sub.tab, 
    xlab = "ticks", type = "l", col = "black", lwd = 1)   

b<- coplot(mean_dist ~ time |cells.f  * perc.f, data = sub.tab, 
    xlab = "ticks", type = "l", col = "grey", lwd = 1) 

a + as.layer(b)  # this doesn't work

请问,如何合并这两个图(灰线和黑线)?我无法弄明白......谢谢!

enter image description here enter image description here

1 个答案:

答案 0 :(得分:2)

链接到示例数据并不是非常有用。这是一个随机创建的样本数据集

set.seed(15)
dd <- do.call("rbind", 
    do.call("Map", c(list(function(a,b) {
        cbind.data.frame(a,b, x=1:5, 
        y1=cumsum(rpois(5,7)),
        y2=cumsum(rpois(5,9)))
    }), 
    expand.grid(a=letters[1:5], b=letters[20:22])))
 )
 head(dd)
#   a b x y1 y2
# 1 a t 1  8 16
# 2 a t 2 13 28
# 3 a t 3 25 35
# 4 a t 4 33 45
# 5 a t 5 39 57
# 6 b t 1  4 12

我会注意到coplot是基本图形功能,不是莱迪思。但它确实有一个panel=参数。您可以让coplot()负责为您量化数据(至少计算索引)。但是,与其他基本图形功能一样,绘制不同的组并不是完全无关紧要的。在这种情况下你可以用

来做
coplot(y~x|a+b, 
   # make a fake y col to cover range of all y1 and y2 values
   cbind(dd, y=seq(min(dd$y1, dd$y2), max(dd$y1, dd$y2), length.out=nrow(dd))), 
    #request subscripts to be sent to panel function
    subscripts=TRUE, 
    panel=function(x,y,subscripts, ...) {
        # draw group 1
        lines(x, dd$y1[subscripts])
        # draw group 2
        lines(x, dd$y2[subscripts], col="red")
})

这给出了

enter image description here