ColorRamp возвращает 0
Я пытаюсь построить линии и раскрасить линии, основываясь на вероятности этой связи. Учитывая вектор вероятностей, я использую:
colfunc <- colorRamp(c("white", "red"))
colors <- colfunc(probs)
Тогда цвета - это матрица значений rgb nx3. Однако colfunc довольно часто возвращает значение 0, поэтому, когда я пытаюсь построить график с использованием этих цветов, R жалуется
Error in col2rgb(colors) : numerical color values must be positive
Есть ли ошибка в способе определения моей цветовой функции?
2 ответа
Думаю, ваша функция работает нормально, но она не возвращает цвета, которые вы можете использовать plot
, так как plot
хочет цвет, а не значения RGB в матрице.
Возможно, есть лучший способ, но вы можете просто скрыть матрицу:
probs <- runif(10)
colors <- colfunc(probs)
my_col = apply(colors, MARGIN = 1, function(x) rgb(x[1]/255, x[2]/255, x[3]/255))
plot(1:10, 1:10, col = my_col) # should work fine
или вы можете просто обернуть свою функцию
better_colfunc <- function(x, ramp = colorRamp(c("white", "red"))) {
colors <- ramp(x)
colors = apply(colors, MARGIN = 1, function(x) rgb(x[1]/255, x[2]/255, x[3]/255))
return(colors)
}
plot(1:10, 1:10, col = better_colfunc(probs, ramp = colfunc))
Что касается "colfunc довольно часто возвращает значение 0" и других проблем, вам нужно будет поделиться обеими данными (что probs
как?), а также, возможно, фактический код печати. Смотрите здесь советы по созданию воспроизводимых вопросов.
Я немного запутался в том, что вы пытаетесь сделать... функция col2rgb возвращает значения rgb, так что, если у вас уже есть такие, что вы хотите?
Или, если вы хотите RGB, почему бы не использовать:
col2rgb(c("white", "red"))