在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
在结果图中,第一行绘制为红色,第二行绘制为蓝色(反转)。
我有什么问题,或者是否有其他解释?
答案 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))