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"))
Другие вопросы по тегам