2013-03-04 5 views
5

Jestem floundering z kolorami w ggplot. Próbuję zastosować gradient kolorów na podstawie kolumny rang poniżej. Jestem prawie pewien, że jest to rozbieżność między kolorami i wypełnieniem lub zmiennymi dyskretnymi i ciągłymi. Chcę kolory, jak pokazano na skali w "c" i "d" poniżej, ale moje najbliższe próby to "e" i "f", gdzie punkty są kolorowe, ale nie są zabarwione gradientem. Preferowany gradient odnosi się do wartości w rankingu 1: 100, a wszystkie pozostałe wartości są czarne.Próba zastosowania gradientu koloru na histogramie w ggplot

Każda pomoc będzie najbardziej ceniona.

library(reshape2) 
library(ggplot2) 

co2 <- read.table(
    header=TRUE, text=' 
rank tons 
1  2 1.00 
2  4 1.00 
3  7 0.00 
4 44 0.00 
5 104 0.00 
6 48 0.05 
7 32 0.50 
8  5 0.00 
9 78 1.00 
10 12 0.00 
11 15 0.00 
12 176 1.00 
13 440 0.02 
14 249 0.00 
15 481 0.00 
16 388 0.00 
17 458 0.05 
18 488 0.00 
19 264 0.00 
20 203 0.00 
      ')  

Próbowałem:

#does not add rank as a color 
c<- ggplot(data=co2, aes(x = tons, color=rank)) 
c + geom_dotplot(stackgroups = TRUE, binwidth = .05, binpositions = "all") + 
    scale_colour_gradient(limits=c(1, 500)) 

#also does not add rank as color 
d<- ggplot(data=co2, aes(x = tons, color=rank)) 
d + geom_dotplot(stackgroups = TRUE, binwidth = 0.05, method = "histodot") + 
    scale_colour_gradient(limits=c(1, 100)) 

#create breaks for fill-- works correctly but no gradient 
co2$brks<- cut(co2$rank, c(seq(0, 100, 20), max(co2$rank))) 
e<- ggplot(data=co2, aes(x = tons, fill=brks)) 
e + geom_dotplot(stackgroups = TRUE, binwidth = 0.05, method = "histodot") 

#also works correctly but no gradient 
f<- ggplot(data=co2, aes(x = tons, fill=brks)) + geom_histogram() 
f 

Sprawdziłem to już, ale ja wciąż czegoś brakuje:

Odpowiedz

4

Jest trochę hacky odpowiedź, ale to działa:

##Define breaks 
co2$brks<- cut(co2$rank, c(seq(0, 100, 5), max(co2$rank))) 
#Create a plot object: 
g = ggplot(data=co2, aes(x = tons, fill=brks)) + 
    geom_dotplot(stackgroups = TRUE, binwidth = 0.05, method = "histodot") 

Teraz ręcznie określić kolory do wykorzystania jako palecie:

g + scale_fill_manual(values=colorRampPalette(c("white", "red"))(length(co2$brks))) 

enter image description here

1

Po prostu musiałem dodać

+ scale_fill_brewer(palette="RdYlBu") 

Patrz poniżej:

library(reshape2) 
library(ggplot2) 

co2 <- read.table(
    header=TRUE, text=' 
rank tons 
1  2 1.00 
2  4 1.00 
3  7 0.00 
4 44 0.00 
5 104 0.00 
6 48 0.05 
7 32 0.50 
8  5 0.00 
9 78 1.00 
10 12 0.00 
11 15 0.00 
12 176 1.00 
13 440 0.02 
14 249 0.00 
15 481 0.00 
16 388 0.00 
17 458 0.05 
18 488 0.00 
19 264 0.00 
20 203 0.00 
      ')                           

#create breaks for fill-- 
co2$brks<- cut(co2$rank, c(seq(0, 100, 20), max(co2$rank))) 
e<- ggplot(data=co2, aes(x = tons, fill=brks)) 
e + geom_dotplot(stackgroups = TRUE, binwidth = 0.05, method = "histodot") + scale_fill_brewer(palette="RdYlBu") 

#also works correctly! 
ggplot(data=co2, aes(x = tons, fill=brks)) + geom_histogram() + scale_fill_brewer(palette="RdYlBu")