Контрольный цвет на графике r

Вывод nestednodf, функции package vegan, можно легко построить на графике. Я хотел бы выделить выбранные строки другим цветом, но я не знаю, как указать это на одном графике. Скажем, мне нужны строки 1,3 и 5 синего цвета, а строки 2 и 4 красным (цвет по умолчанию). Этот код позволяет перекрыть второй график строками 1,3,5 синего цвета, но не вставляет выбранные строки в первый:

library(vegan)
df=data.frame(a=c(0,1,1,1,0), b=c(1,0,0,0,1), c=c(1,1,1,1,0), d=c(1,0,1,0,1), e=c(0,0,0,1,1))
plot(nestednodf(df))
plot(nestednodf(df[c(1,3,5),]), col='blue', add=T)

Есть ли способ контролировать цвет строки? Что-то вроде этого:

plot(nestednodf(df), row.col=c('blue', '', 'blue', '', 'blue'))

person Santi XGR    schedule 08.06.2016    source источник
comment
Не могли бы вы уточнить, но не вставляет выбранные строки в первую?   -  person Hack-R    schedule 08.06.2016
comment
Второй график перекрывает первый, и, хотя он отображает мои выбранные строки, очевидно, не помещает их в желаемом порядке на первом графике, он просто отображает строки, которые я указал на первом графике. Я хотел раскрасить разные строки разными цветами на первом участке.   -  person Santi XGR    schedule 09.06.2016


Ответы (1)


Вы можете просмотреть источник функции, введя vegan:::plot.nestednodf. На самом деле нет возможности настроить два цвета строк. Однако вы можете видеть, что функция довольно проста, поэтому вы можете написать свою собственную версию.

myplot <- function (x, col = "red", names = FALSE, ...) 
{
    z <- x$comm
    z <- t(z[nrow(z):1, ])

    if (length(col) == 1) 
        col <- c(NA, col)
    else if ( length(col)>1) {
        z <- z*((col(z)-1)%%2+1)
    }
    image(z, axes = FALSE, col = col, ...)
    box()
    if (length(names) == 1) 
        names <- rep(names, 2)
    if (names[1]) {
        axis(2, at = seq(1, 0, len = ncol(z)), labels = rev(colnames(z)), 
            las = 2, ...)
    }
    if (names[2]) {
        axis(3, at = seq(0, 1, len = nrow(z)), labels = rownames(z), 
            las = 2, ...)
    }
}

Здесь я просто добавил строку, чтобы изменить цвета, чтобы они чередовались между указанными значениями. Сравнивать

plot(nestednodf(df))
myplot(nestednodf(df), col=c(NA,'red','blue'))

введите описание изображения здесь

Обратите внимание, что я передаю три цвета, потому что первый используется для значений «0» в матрице.

person MrFlick    schedule 08.06.2016