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将任何变量绑定到任何绘图参数。。。也许您可以通过重写默认面板函数来获得更好的解决方案。。