Градієнт 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

Мені подобається ця палітра, але є занадто багато зеленого і дуже мало жовтого. Чи є спосіб це виправити?
Герман Зубний

1
Додавання для тих, хто не сподівався побачити такий варіант, як "springgreen" або "royalblue". Усі кольори, доступні для використання, можна повернути у вигляді списку, виконавши: colours ().
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
Тайлер Рінкер

Додано посилання, яке надає кращі варіанти градієнтів кольорів та відтінків, які працюють як у кольорі, так і в B&W.
Ануша

@DavidDelMonte У мене може бути збережена копія файлу, але не оновлене посилання. Не знаю, куди його завантажити.
Ануша

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.