Подтвердить что ты не робот

В R можно наложить 2 цвета на график, чтобы сделать третий (например, с добавлением или субтрактивным смешиванием цветов)

Я хотел бы сделать график разброса с двумя категориями данных, один из которых выполнен в желтом и один в синем, а они отображаются зеленым цветом, где они накладываются (или любая другая комбинация). Я обнаружил, что вещи немного сложнее даже с прозрачностью. Цвет графика зависит от того, была ли последняя точка, нанесенная в пространстве синим или желтым.

Например, с помощью следующего кода:

col1 <- rgb(red = .0, green = 0, blue = 0.8, alpha = 0.8)
col2 <- rgb(red = .8, green = 0.8, blue = 0, alpha = 0.8)
circle <- data.frame(x = c(0.2,0), 
                    y = c(0,0),
                    col = c(col1, col2),
                    stringsAsFactors = F)
orders <- c(1,2)
plot(x = circle$x[orders], y = circle$y[orders],
     col = circle$col[orders], pch = 19, cex = 100, xlab = "", ylab = "")

В зависимости от того, как вы устанавливаете вектор orders (который устанавливает, каким образом вокруг двух больших точек нарисованы), вы получаете разные результаты: enter image description here

И если вы меняете порядок, в котором вы рисуете два круга вокруг, вы получаете: enter image description here

В любом случае, я ожидал смешения цветов, чтобы получить зеленый цвет. Есть ли способ сделать это? Спасибо!

Изменить - два графика были сделаны с использованием устройства pdf. Я также пытался запустить код через tikzDevice, чтобы убедиться, что это сработало, но это не так.

4b9b3361

Ответ 1

В файле справки для устройства pdf() указано, что значение по умолчанию для фона является "прозрачным", хотя на практике это не похоже на его поведение, возможно, потому, что зрители принимают белый фон или, возможно, потому, что значение по умолчанию для графика функция "белая". Средняя часть сначала становится цветом, равным сочетанием белого и зеленого, а вторая секунда затем добавляет к нему синий цвет. Поэтому я предполагаю, что математика предсказывает значение rgb (0,5, 0,5, (0,5 + 0,8)/2), а затем смешивание этой смеси с наложенным цветом. И я думаю, что белый + col1 добавляется в равных пропорциях к значения из col2, что делает математику некоммутативной. Во всяком случае, конечный результат, вероятно, будет иным, если вы можете заставить фон "прозрачным". Поведение по умолчанию больше похоже на смешивание красок, чем на яркие театральные огни.

Цветовая модель PDF описана в http://www.adobe.com/devnet/pdf/pdf_reference.html и будет определять, что вы можете ожидать от устройства pdf (но не обязательно, что зритель предоставит).

Я опробовал свою теорию о том, что белым фоном была проблема (и, похоже, она опровергла его), изменив фон на "черный" в надежде, что не будет добавленных значений для многоуровневых векторов rgb:

pdf("testfil12rev.pdf", bg="black")
 col1 <- rgb(red = .0, green = 0, blue = 1, alpha = 0.5)
 col2 <- rgb(red = 1, green = 0, blue = 0, alpha = 0.5)
 circle <- data.frame(x = c(0.2,0), 
                     y = c(0,0),
                     col = c(col1, col2),
                     stringsAsFactors = F)
 orders <- c(1,2)
plot(x = circle$x[orders], y = circle$y[orders], bg="black",
      col = circle$col[orders], pch = 19, cex = 100, xlab = "", ylab = "")

 dev.off()

Реверсирование индикатора "порядки" не приводит к тому же смешанному цвету с черным фоном.

EDIT: существует предварительная публикация SO с правилами смешивания цветов и альфа: Как рассчитать цвет RGB, указав значение альфа-смешивания?