Градиент 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)

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


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
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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.