Pytanie Gradient n kolorów od koloru 1 do koloru 2


Często pracuję z ggplot2 to sprawia, że ​​gradienty są ładne (kliknij tutaj, aby zobaczyć przykład). Mam potrzebę pracy w bazie i myślę scales można tam również użyć do tworzenia gradientów kolorów, ale jestem poważnie nie na miejscu. Podstawowym celem jest wygenerowanie palety n kolorów w zakresie od koloru x do koloru y. Rozwiązanie musi jednak działać w bazie. To był punkt wyjścia, ale nie ma miejsca na wprowadzenie n.

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

Jestem w pełni świadomy:

brewer.pal(8, "Spectral") 

od RColorBrewer. Patrzę bardziej na podejście podobne do tego ggplot2 obsługuje gradienty, które mówią, że mam te dwa kolory i chcę 15 kolorów po drodze. Jak mogę to zrobić?


76
2017-11-12 23:16


pochodzenie


Myślę, że potrzebujesz tego waga pakiet; najnowszy ggplot2 wersje zależą od tego dla kodu źródłowego. To znaczy. nie potrzebujesz ggplot2 do korzystania z wag, po prostu potrzebujesz waga pakiet. Nie mam pojęcia, jak działają funkcje waga działa jednak :-) - Gavin Simpson


Odpowiedzi:


colorRampPalette może być twoim przyjacielem tutaj:

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

A żeby pokazać, że działa:

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

enter image description here


125
2017-11-12 23:21



+1 pobity o 8 sekund! - mnel
@mnel - quickdraw win! ;-) - thelatemail
To jest piękne. - Tyler Rinker
Zwróć uwagę, że jeśli jesteś szczególnie zachwycony wcześniej istniejącą paletą, np. brewer.pal(8, "Spectral"), możesz podać wynikowy wektor kolorów colorRampPalette generować więcej kolorów wzdłuż tej rampy. Na przykład: colorRampPalette(brewer.pal(8, "Spectral")). - jbaums
A co z kolorem z liniami lub kształtami diagonalnymi w bloku? @ poczta głosowa - user3631848


Aby rozwinąć poprzednią odpowiedź colorRampPalettemoże obsługiwać więcej niż dwa kolory.

Aby uzyskać bardziej rozwinięty wygląd typu "mapa ciepła", możesz ...

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

Wynikowy obraz:

enter image description here


38
2018-05-29 15:41



czy mogę również określić przekątne linie lub kształty w kolorze? @jsol - user3631848
Lubię tę paletę, ale jest za dużo zieleni i bardzo mało żółtej. Czy istnieje sposób, aby to poprawić? - Herman Toothrot


Spróbuj wykonać następujące czynności:

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)

enter image description here


11
2018-02-26 16:04





Powyższa odpowiedź jest przydatna, ale na wykresach trudno odróżnić ciemniejsze gradienty czerni. Jedną z alternatyw, które znalazłem, jest użycie gradientów szarych kolorów w następujący sposób

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

Więcej informacji na temat skali szarości tutaj. 

Dodany 

Kiedy użyłem powyższego kodu dla różnych kolorów, takich jak niebieski i czarny, gradienty nie były takie jasne. heat.colors() wydaje się bardziej przydatny.

Ten dokument zawiera bardziej szczegółowe informacje i opcje. pdf


6
2017-09-24 11:30



Myślę, że ta odpowiedź jest lepsza od czerni do bieli, ale nie można jej uogólniać na kolory. Dziękujemy za dodanie tych cennych informacji. +1 - Tyler Rinker
Dodano łącze, które zapewnia lepsze opcje gradientów i odcieni kolorów, które działają zarówno w kolorze, jak i czarno-białym. - Anusha
Ładny link! Bardzo informujące. - Tyler Rinker
Czy jest aktualizacja tego linku. Od 1/2015 jest uszkodzona. - David DelMonte
@DavidDelMonte - web.archive.org/web/20141111182737/http://www.stat.tamu.edu/... najpierw sprawdź archive.org. - thelatemail