R plotCI неправильно назначенные цвета, нанесенные на график для ряда - PullRequest
4 голосов
/ 29 ноября 2011

В R v2.14.0 x64 в Windows 7 я использую функцию plotCI в библиотеке gplots и пытаюсь установить цвет каждого графика на основе данных в фрейме данных с помощью:

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 Ответ

6 голосов
/ 29 ноября 2011

Здесь происходит путаница между факторами и персонажами. Переменная 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...