在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
在结果图中,第一条线绘制为红色,第二条线绘制为蓝色(反向)。
我在做错什么吗,还是对此有其他解释?
最佳答案
这里有一个因素/字符混乱。 color
变量作为一个因数读入R,因此其基础数字值是根据值的字母顺序分配的:“ black” = 1,“ blue” = 2,(可能)“ green” = 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))