2016-05-20 4 views
2

Когда я использую scale_fill_gradient() с geom_bar() в ggplot2, для всех баров заполняется только один цвет по умолчанию. Но ожидая, что ЗЕЛЕНЫЙ КРАСНЫЙ для низкого и высокого счета.Цвет градиента заливки не работает с geom_bar ggplot2

theTable <- within(data, Tag <- factor(tag, levels=names(sort(table(tag), 
                 decreasing=FALSE)))) 
histGraph=ggplot(theTable,aes(x=Tag))+ 
    coord_flip() + 
    scale_fill_gradient(low = "green", high = "red")+ 
    geom_bar(width=0.7) 

Выход выше кода,

Actual output

И данные выглядят,

ID Tag 
1 BibArticleDOI 
1 FirstPage 
1 LastPage 
2 BibArticleDOI 
2 JournalTitle 
3 BibArticleDOI 
3 FirstPage 

Edit: Как получил предложение от Романа, редактирование выше кода.

dataOfTag <- as.data.frame(table(data$tag)) 
dataOfTag$tag <- factor(dataOfTag$Var1, levels = dataOfTag$Var1[order(dataOfTag$Freq)]) 

histPlot=ggplot(dataOfTag,aes(x=tag, y = Freq, fill = Freq))+ 
    coord_flip() + 
    scale_fill_gradient(low = "green", high = "red")+ 
    geom_bar(width=0.7, stat = "identity") 
histPlot 
+2

Вы должны карту 'fill' переменной. –

ответ

5

Вы можете попробовать что-то по строкам нижеследующего кода. Предустановите частоты и назначьте заполнение переменной частоты.

library(ggplot2) 

xy <- data.frame(letters = sample(letters[1:6], size = 1000, replace = TRUE, prob = c(0.5, 0.3, 0.1, 0.5, 0.25, 0.25))) 

xy2 <- as.data.frame(table(xy$letters)) 
xy2$Var1 <- factor(xy2$Var1, levels = xy2$Var1[order(xy2$Freq)]) 

ggplot(xy2,aes(x=Var1, y = Freq, fill = Freq))+ 
    coord_flip() + 
    scale_fill_gradient(low = "green", high = "red")+ 
    geom_bar(width=0.7, stat = "identity") 

enter image description here

+0

Спасибо, Роман, это работает. –

0

Я думаю, что вы можете использовать ..count.. так что вам не нужно предварительно вычислить частоту:

histGraph=ggplot(theTable,aes(x=Tag, fill=..count..))+ 
    coord_flip() + 
    scale_fill_gradient(low = "green", high = "red")+ 
    geom_bar(width=0.7) 
Смежные вопросы