2

我的数据以两个变量为条件,一个主要条件,一个次要条件。我想要一个带有点和线 ( xyplot)的 ( ),在一个面板中,以便主要条件确定颜色,而次要条件用于绘制线条。latticetype='b'

这是一个代表我的问题的示例(请参阅下面的代码以生成数据框)。 d是主要条件,c是次要条件。

> dat
     x          y c d
1    1  0.9645269 a A
2    2  1.4892217 a A
3    3  1.4848654 a A
....
10  10  2.4802803 a A
11   1  1.5606218 b A
12   2  1.5346806 b A
....
98   8  2.0381943 j B
99   9  2.0826099 j B
100 10  2.2799917 j B

使连接线成为条件的c方法是groups=c在情节中使用。那么区分它们的方法是使用一个以 为条件的公式d

xyplot(y~x|d, data=dat, type='b', groups=c)

在此处输入图像描述

但是,我想要在同一个面板中的情节。删除公式条件d会生成一个面板,但当group=d指定时,会绘制“回溯”线:

xyplot(y~x, data=dat, type='b', groups=d, auto.key=list(space='inside'))

在此处输入图像描述

我想要的看起来很像上面的情节,只是没有这些“回溯”线。

在此示例中可以显式设置颜色,因为我知道有五行类别“A”,然后是五行类别“B”,但这并不容易解决我的实际问题。此外,auto.key以这种方式设置颜色时也没用:

xyplot(y~x, data=dat, type='b', groups=c, col=rep(5:6, each=5))

在此处输入图像描述

数据:

set.seed(1)
dat <- do.call(
  rbind,
  lapply(1:10,
         function(x) {
           firsthalf <- x < 6
           data.frame(x=1:10, y=log(1:10 + rnorm(10, .25) + 2 * firsthalf),
                                c=letters[x],
                                d=LETTERS[2-firsthalf]
                                )
         }
  )
)
4

2 回答 2

3

默认图形参数是从superpose.symbol和获得的superpose.line。一种解决方案是使用par.settings参数设置它们。

## I compute the color by group 
col <-by(dat,dat$c,
                FUN=function(x){
                  v <- ifelse(x$d=='A','darkgreen','orange')
                  v[1]  ## I return one parameter , since I need one color
                  }
         )

 xyplot(y~x, data=dat, type='b', groups=c,
       auto.key = list(text =levels(dat$d),points=F),
       par.settings=
         list(superpose.line   = list(col = col),                 ## color of lines
              superpose.symbol = list(col=col),                   ## colors of points
              add.text = list(col=c('darkgreen','orange'))))      ## color of text in the legend

在此处输入图像描述

于 2013-01-31T15:20:42.593 回答
1

必须是格子吗?在 ggplot 中相当简单:

library(ggplot2)

ggplot(dat, aes(x=x,y=y,colour=d)) + geom_line(aes(group=c),size=0.8) + geom_point(shape=1) 

这是一个快速而肮脏的例子。您可以自定义线条、图例、轴、背景的颜色...

在此处输入图像描述

于 2013-01-31T08:03:20.320 回答