R 从一个组连接线,从另一个组连接颜色

R 从一个组连接线,从另一个组连接颜色,r,lattice,R,Lattice,我有两个变量的数据,一个主要条件,一个次要条件。我想要一个带有点和线(type='b')的xyplot(lattice),在一个面板中,以便主条件确定颜色,次条件用于绘制线 下面是一个代表我的问题的示例(请参阅下面生成数据帧的代码)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

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

下面是一个代表我的问题的示例(请参阅下面生成数据帧的代码)
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]
                                )
         }
  )
)
set.seed(1)

dat它必须是晶格吗?在ggplot中,这相当容易:

library(ggplot2)

ggplot(dat, aes(x=x,y=y,colour=d)) + geom_line(aes(group=c),size=0.8) + geom_point(shape=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) 
这是一个又快又脏的例子。您可以自定义线条、图例、轴、背景等的颜色


默认图形参数从
叠加.symbol
叠加.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
##我按组计算颜色

col默认图形参数从
supplose.symbol
supplose.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
##我按组计算颜色

col我确实在寻找一个晶格解,但如果我没有得到它,我会接受它(并且我自己也没有找到)。我确实在寻找晶格解,但是如果我没有得到它,我会接受它(并且我自己也没有找到)。请记下关键。它应该有
A
B
@MatthewLundberg,我知道。我只是在这里显示键,以根据组检查颜色是否合适。我知道你不喜欢我的解决方案?@MatthewLundberg我更改了我的解决方案,以根据d级别添加键。具体来说,我希望
lattice
内置一些东西来进行颜色选择,但是我应该能够在我的真实代码中调整这种函数来完成这项工作。我不完全理解你的想法。如果我知道你不想自己设定颜色的话?在这个解决方案中,我所做的是在选择“提供组”时更改默认晶格行为。在这种情况下,代码>面板。Suffys正在使用默认设置进行作业,您可以使用<代码> TrLLI.PAR。这与ggplot2的原理不同,ggplot2将任何变量绑定到任何绘图参数。。。也许你可以通过覆盖默认的面板函数得到更好的解决方案。注意这个键。它应该有
A
B
@MatthewLundberg,我知道。我只是在这里显示键,以根据组检查颜色是否合适。我知道你不喜欢我的解决方案?@MatthewLundberg我更改了我的解决方案,以根据d级别添加键。具体来说,我希望
lattice
内置一些东西来进行颜色选择,但是我应该能够在我的真实代码中调整这种函数来完成这项工作。我不完全理解你的想法。如果我知道你不想自己设定颜色的话?在这个解决方案中,我所做的是在选择“提供组”时更改默认晶格行为。在这种情况下,代码>面板。Suffys正在使用默认设置进行作业,您可以使用<代码> TrLLI.PAR。这与ggplot2的原理不同,ggplot2将任何变量绑定到任何绘图参数。。。也许您可以通过重写默认面板函数来获得更好的解决方案。。