Градиент n цветов в диапазоне от цвета 1 до цвета 2

108

Я часто работаю с тем, ggplot2что делает градиенты красивыми ( щелкните здесь, чтобы увидеть пример ). Мне нужно работать с базой, и я думаю, что scalesее можно использовать и для создания цветовых градиентов, но я совершенно не понимаю, как. Основная цель - создать палитру из n цветов, которая варьируется от цвета x до цвета y. Однако решение должно работать в базе. Это была отправная точка, но нет места для ввода n.

 scale_colour_gradientn(colours=c("red", "blue"))

Мне хорошо известно:

brewer.pal(8, "Spectral") 

из RColorBrewer. Я больше ищу подход, похожий на то, как ggplot2обрабатывает градиенты, который говорит, что у меня есть эти два цвета, и мне нужно 15 цветов на этом пути. Как я могу это сделать?

Тайлер Ринкер
источник
1
Думаю, вам нужен пакет весов ; последние версии ggplot2 зависят от этого для базового кода. Т.е. вам не нужно ggplot2 использовать весы, вам просто нужно весы пакет. Не знаю, как работают функции в весах :-)
Гэвин Симпсон
1
Не по теме, поскольку вы baseспециально просили , но я считаю colourvalues( также в CRAN ) особенно удобным для сопоставления значений с градиентом. К тому же он довольно легкий (зависит от Rcpp).
MichaelChirico
@MichaelChirico Не не по теме, я имел в виду, что мне нужно было использовать базовое построение, потому что пакет, который я использовал, был написан в базе (я думаю, wordcloud), а не в сетке. Может в ответ выложить?
Тайлер Ринкер

Ответы:

179

colorRampPalette может быть здесь твоим другом:

colfunc <- colorRampPalette(c("black", "white"))
colfunc(10)
# [1] "#000000" "#1C1C1C" "#383838" "#555555" "#717171" "#8D8D8D" "#AAAAAA"
# [8] "#C6C6C6" "#E2E2E2" "#FFFFFF"

И просто чтобы показать, как это работает:

plot(rep(1,10),col=colfunc(10),pch=19,cex=3)

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

thelatemail
источник
14
Обратите внимание, что если вам особенно нравится уже существующая палитра, например brewer.pal(8, "Spectral"), вы можете присвоить результирующий вектор цветов, colorRampPaletteчтобы сгенерировать больше цветов на этой рампе. Например: colorRampPalette(brewer.pal(8, "Spectral")).
jbaums
А как насчет цвета диагональных линий или форм в блоке? @thelatemail
user3631848
50

Просто чтобы расширить предыдущий ответ, colorRampPaletteможно обрабатывать более двух цветов.

Так что для более развернутого типа "тепловой карты" вы можете ....

colfunc<-colorRampPalette(c("red","yellow","springgreen","royalblue"))
plot(rep(1,50),col=(colfunc(50)), pch=19,cex=2)

Полученное изображение:

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

jsol
источник
можно также указать диагональные линии или формы в цвете? @jsol
user3631848
Мне нравится эта палитра, но в ней слишком много зеленого и очень мало желтого. Есть способ исправить это?
Herman
1
Добавление для всех, кто не ожидал увидеть такие варианты, как «весенне-зеленый» или «королевский синий». Все доступные для использования цвета можно вернуть в виде списка, запустив: colors ().
jadki
20

Попробуйте следующее:

color.gradient <- function(x, colors=c("red","yellow","green"), colsteps=100) {
  return( colorRampPalette(colors) (colsteps) [ findInterval(x, seq(min(x),max(x), length.out=colsteps)) ] )
}
x <- c((1:100)^2, (100:1)^2)
plot(x,col=color.gradient(x), pch=19,cex=2)

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

Дэниел Хуп
источник
эта функция должна быть добавлена ​​по умолчанию в базу R!
Саймон С.
7

Приведенный выше ответ полезен, но на графиках трудно различить более темные градиенты черного. Я нашел одну альтернативу - использовать градиенты серого цвета следующим образом.

palette(gray.colors(10, 0.9, 0.4))
plot(rep(1,10),col=1:10,pch=19,cex=3))

Больше информации о серой шкале здесь.

Добавлено

Когда я использовал приведенный выше код для разных цветов, таких как синий и черный, градиенты были не такими четкими. heat.colors()кажется более полезным.

В этом документе есть более подробная информация и параметры. pdf

Ануша
источник
2
Я думаю, что этот ответ лучше для черного и белого, но не распространяется на цвета. Спасибо за добавление этой ценной информации. +1
Тайлер Ринкер
Добавлена ​​ссылка, которая предоставляет лучшие варианты цветовых градиентов и оттенков, которые работают как в цвете, так и в ч / б.
Anusha
@DavidDelMonte У меня может быть сохраненная копия файла, но не обновленная ссылка. Не знаю, куда его загрузить.
Anusha
2
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/… всегда сначала проверяйте archive.org.
thelatemail