2013-08-14 4 views
2

Я пытаюсь создать несколько графиков с помощью ggplot. Графики представляют собой серию гистограмм, которые вместе описывают также линию EXAMPLE (Кстати, да, я понимаю, что цветовая палитра уродливая, ее цветной слепой дружелюбный, что важно для моей аудитории)Как вручную установить цвет заливки geom_bar в ggplot

Моя проблема в том, что мне нужно чтобы сделать несколько из этих графиков, и я хочу, чтобы цвета оставались согласованными во всех них. Поскольку переменная «Тип» появляется в разных порядках по нескольким наборам данных, которые я собираюсь использовать, мне нужно вручную установить цвет для каждого типа. Я думал, что этот вопрос: How to manually fill colors in a ggplot2 histogram будет иметь ответ, но когда я попробую это, он изменит имена в легенде на шестнадцатеричное определение цвета, но сами цвета вернутся к палитре по умолчанию ggplot.

Вот код, который я до сих пор:

cbbPalette <- c("#000000", "#E69F00", "#56B4E9", "#009E73", "#F0E442", "#0072B2", "#D55E00", "#CC79A7") 

ggplot()+ 
    scale_fill_manual(values=cbbPalette)+ 
    geom_bar(data=subset(eten, Type=="Waste Wood"), aes(x=Tprod, y=acost, fill=cbbPalette[1], width=MGGEY+25), stat="identity")+ 
    geom_bar(data=subset(eten, Type=="Agricultural Residue"), aes(x=Tprod, y=acost, fill=cbbPalette[2], width=MGGEY+25), stat="identity")+ 
    geom_bar(data=subset(eten, Type=="Forest Residue"), aes(x=Tprod, y=acost, fill=cbbPalette[3], width=MGGEY+25), stat="identity")+ 
    geom_bar(data=subset(eten, Type=="Herbaceous Energy Crop"), aes(x=Tprod, y=acost, fill=cbbPalette[4], width=MGGEY+25), stat="identity")+ 
    geom_bar(data=subset(eten, Type=="MSW"), aes(x=Tprod, y=acost, fill=cbbPalette[5], width=MGGEY+25), stat="identity")+ 
    scale_y_continuous("Average Cost", labels = dollar, expand=c(0,0))+ 
    scale_x_continuous("Million Gallons of Gasoline Equivalent", expand=c(0,0))+ 
    theme(legend.position="bottom", panel.background=element_rect(colour = NA, fill = "white"), axis.line=element_line(), panel.grid.major.y=element_line(colour="black"), panel.grid.minor=element_blank()) 

Мой уровень R экспертизы является довольно низким, так что я может быть что-то просто не хватает, но я не могу заставить его работать самостоятельно. Заранее спасибо за помощь.

Обновление: Я непреднамеренно вставил неверную версию своего кода, команды «заполнить» вернулись к моему лучшему предположению. Примерный набор данных - here.

+0

Можете ли вы предоставить набор данных eten, пожалуйста или, по крайней мере, воспроизводимый пример http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example ?? Кроме того, у вас нет подмножества для каждого типа. – JT85

ответ

5

Я предполагаю, что вы просмотрели пример слепого цвета ggplot here? Без ваших данных я могу только предположить, что ваши вызовы geom_bar создают неоднозначность относительно того, какой слой применить изменения заполнения, поскольку ваш первоначальный вызов ggplot не имеет аргумента aes. Попробуйте переместить все данные в один dataframe и ссылаться на него в первоначальный вызов к ggplot, например,

ggplot(df, aes(x=cond, y=yval)) + 
    geom_bar() + 
    scale_fill_manual(values=cbbPalette) 

, где DF является dataframe, содержащий данные и ОПЗ является отображение между вашими переменными. Это дает понять ggplot, что вы хотите, чтобы цвета заливки geom_bar соответствовали данным в df. Есть способы сделать эту работу с вашим текущим кодом, но они нетрадиционные для создания стандартных графиков.

+0

Этот ответ работает, чтобы создать образец графика, который я показал на изображении, с которым я связан, но это не помогает с реальной проблемой. У меня есть 5-6 подобных наборов данных, которые мне нужны для создания этих графиков, и я хочу убедиться, что цвет для каждого типа остается одинаковым для каждого графика. Поэтому я хотел бы вручную назначить один цвет «Отходы дерева», например, а другой - «MSW», так что каждый раз, когда я воспроизвожу графики, цвета одинаковы. Пример, который вы предоставили, по-видимому, содержит ggplot, какие цвета должны ассоциироваться с каждым типом при каждом запуске скрипта. – scianalysis

+1

А, я вижу. У вас проблемы с факторами? R имеет эту досадную привычку переупорядочивать переменные таким образом, что это явно причудливо. Вы можете заставить ggplot упорядочить переменные так, как вам хотелось бы. См. [Здесь] (http://kohske.wordpress.com/2010/12/29/faq-how-to-order-the-factor-variables-in-ggplot2/). Используя эти трюки, как только вы поместите каждую из своих меток в том же порядке, каждый из ваших участков будет иметь тот же порядок заполнения цвета. –

+0

Это тоже не сработало. Он определенно переупорядочил факторы в кадре данных, потому что изменилась взаимосвязь между типом и цветом заливки, но не каждый тип представлен в каждом из наборов данных, с которыми я работаю. То, что мне действительно нужно, это способ сказать: Если Type = "Y", то fill = cbbPalette [x] – scianalysis

Смежные вопросы