R plotCI错误设计的颜色为系列绘制

时间:2011-11-28 21:34:49

标签: r plot

在Windows 7上的R v2.14.0 x64中,我在gplots库中使用plotCI函数,并尝试使用以下内容基于数据框中的数据设置每个图的颜色:

plotCI(
        x = data[1:2,3], 
        ui = data[1:2,5], 
        li = data[1:2,4], 
        col=data[1:2,6], 
        lty = 1, pch=20, xaxt ="n", xlim = c(1,42), ylim = c(0,100), 
        gap = 0 )

除了绘制点的颜色之外,绘图正确地发生,这些点错误地符合错误的系列(但颜色在系列中是一致的)。

我有一个结构数据框(仅前7行):

     size qim       X1   lower    upper color
1    1000   1 100.0000 99.6000 100.0000  blue
2    1000   2  99.8000 99.4000 100.0000  blue
3    1000   3  98.2000 96.6000  99.2000  blue
4    1000   4  62.7000 58.8000  65.7000  blue
5    1000   5  10.4000  9.0000  12.5000  blue
6    1000   6   3.9000  2.9000   4.9000  blue
7    5000   1  99.9000 99.4000 100.0000   red

我使用以下方式对数据框进行排序:

data <- data.unsorted[with(data,order(qim,size)),]

排序似乎已经正确发生,结果是数据框:

 size qim       X1   lower    upper color
1    1000   1 100.0000 99.6000 100.0000  blue
7    5000   1  99.9000 99.4000 100.0000   red
13  10000   1  99.7000 99.4000  99.9000 green
19  40909   1  98.5000 98.5000  98.5000 black
25 152228   1  98.1000 98.1000  98.1000 black
31 241707   1  98.9000 98.9000  98.9000 black
37 434844   1  97.4000 97.4000  97.4000 black

在结果图中,第一行绘制为红色,第二行绘制为蓝色(反转)。

我有什么问题,或者是否有其他解释?

1 个答案:

答案 0 :(得分:6)

这里有一个因素/角色混乱。 color变量被读入R作为因子,因此其基础数值是根据值的字母顺序分配的:“black”= 1,“blue”= 2 ,(可能)“绿色”= 3,“红色”= 4。然后根据R的默认调色板映射颜色:1 =黑色,2 =红色,3 =绿色,4 =蓝色。这导致(看似奇怪的)对应:“黑色”=黑色,“蓝色”=红色,“绿色”=绿色,“红色”=蓝色(!!)。该修复实际上非常简单:只需在as.character变量周围使用color

data.unsorted <- read.table(textConnection(
"    size qim       X1   lower    upper color
1    1000   1 100.0000 99.6000 100.0000  blue
2    1000   2  99.8000 99.4000 100.0000  blue
3    1000   3  98.2000 96.6000  99.2000  blue
4    1000   4  62.7000 58.8000  65.7000  blue
5    1000   5  10.4000  9.0000  12.5000  blue
6    1000   6   3.9000  2.9000   4.9000  blue
7    5000   1  99.9000 99.4000 100.0000   red"),
header=TRUE)


library(gplots)
data <- data.unsorted[with(data,order(qim,size)),]

我还要指出,with语句可以让您更轻松地阅读代码并确保获得正确的列:

with(data[1:2,],
     plotCI(x=X1,li=lower,ui=upper,
            col=as.character(color),
            lty=1,pch=20,
            xaxt="n",
            xlim=c(1,42),ylim=c(0,100),
            gap=0))