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

Jay*_*den 4 plot r

在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 )
Run Code Online (Sandbox Code Playgroud)

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

我有一个结构数据框(仅前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
Run Code Online (Sandbox Code Playgroud)

我使用以下方法对数据框排序:

data <- data.unsorted[with(data,order(qim,size)),]
Run Code Online (Sandbox Code Playgroud)

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

 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
Run Code Online (Sandbox Code Playgroud)

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

有什么我做错了,还是有其他解释?

Ben*_*ker 6

这里有一个因素/字符混乱.该color变量被读入R作为因子,因此其基础数值根据值的字母顺序分配:"black"= 1,"blue"= 2,(可能)"green"= 3,"red "= 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)),]
Run Code Online (Sandbox Code Playgroud)

我还要指出,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))
Run Code Online (Sandbox Code Playgroud)