2015-01-28 4 views
0

я это dataframe называется earningsCont, что я буду использовать, чтобы сделать столбчатую диаграмму:R изменение цвета ggplot2 гистограмма конкретных баров

     Total  Ghost 
JPYUSD   -39837298.85   0 
GBPUSD   -1981571.03 -39837299 
EURUSD   -1251394.07 -41818870 
MXNUSD   -498204.15 -43070264 
NZDUSD   -333466.88 -43568468 
PLNUSD   -215056.56 -43901935 
CNYUSD   -143457.92 -44116992 
AUDUSD   -130047.28 -44260449 
CADUSD    -94396.57 -44390497 
CHFUSD    -46730.39 -44484893 
HKDUSD    -24084.79 -44531624 
BRLUSD     0.00 -44555709 
Diversification -4276539.06 -40279169 
Portfolio  -40279169.44   0 

Я тогда расплавить его выглядеть следующим образом:

   Var1 Var2  value 
1   JPYUSD Total -39837298.85 
2   GBPUSD Total -1981571.03 
3   EURUSD Total -1251394.07 
4   MXNUSD Total -498204.15 
5   NZDUSD Total -333466.88 
6   PLNUSD Total -215056.56 
7   CNYUSD Total -143457.92 
8   AUDUSD Total -130047.28 
9   CADUSD Total -94396.57 
10   CHFUSD Total -46730.39 
11   HKDUSD Total -24084.79 
12   BRLUSD Total   0.00 
13 Diversification Total -4276539.06 
14  Portfolio Total -40279169.44 
15   JPYUSD Ghost   0.00 
16   GBPUSD Ghost -39837298.85 
17   EURUSD Ghost -41818869.88 
18   MXNUSD Ghost -43070263.95 
19   NZDUSD Ghost -43568468.11 
20   PLNUSD Ghost -43901934.98 
21   CNYUSD Ghost -44116991.55 
22   AUDUSD Ghost -44260449.46 
23   CADUSD Ghost -44390496.75 
24   CHFUSD Ghost -44484893.32 
25   HKDUSD Ghost -44531623.72 
26   BRLUSD Ghost -44555708.50 
27 Diversification Ghost -40279169.44 
28  Portfolio Ghost   0.00 

Я использую этот код, чтобы сделать диаграмму:

ggplot(data=earningsCont, aes(x=Var1, y=value, fill=Var2, order=-as.numeric(Var2))) + geom_bar(stat="identity")+ 
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + 
    labs(x="", y="") + 
    scale_y_continuous(labels = comma) + 
    ggtitle("Earnings at Risk: Unhedged (USD)") + 
    scale_fill_manual(values = c(wfGold, wfWhite))+ guides(fill=FALSE) 

это делает его похожим на прилагаемой фотографии. Как вы можете видеть, один из наборов столбцов «Ghost» - белый, поэтому вы не можете его увидеть. Другое золото. Я просто хочу изменить последние два золотых столбца на цвета, которые я определил как wfGreen и wfRed. grasph

Кроме того, почему я должен расплавить его, прежде чем превращать его в гистограмму? Есть ли теперь способ сказать series1 = earningsCont $ Total и series2 = earningsCont $ Ghost?

ответ

2

Вы окрашиваете свои бары в зависимости от значения Var2, который не содержит информации о том, является ли элемент одним из двух последних столбцов («Диверсификация» и «Портфолио»). Вам нужен столбец группировки в вашем фреймворке данных, который содержит эту информацию. Вы можете добавить это вручную, или с помощью следующего (неуклюжего) кода:

earningsConst.plot <- within(earningsConst, { 
    Var3 <- ifelse(Var2 == "Ghost", "Ghost", 
    ifelse(Var1 == "Diversification", "Div", 
     ifelse(Var1 == "Portfolio", "Port", 
     "Total"))) 
}) 

Это должно создать новый dataframe идентичного до последнего, но с красящей колонкой Var3 на четыре уровня, чтобы дать к fill эстетики. Вы можете настроить свой исходный код, чтобы построить так:

ggplot(data=earningsCont.plot, aes(x=Var1, y=value, fill=Var3, order=-as.numeric(Var2))) + geom_bar(stat="identity")+ 
    theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black")) + 
    labs(x="", y="") + 
    scale_y_continuous(labels = comma) + 
    ggtitle("Earnings at Risk: Unhedged (USD)") + 
    scale_fill_manual(values = c(wfGold, wfRed, wfWhite, wfGreen))+ guides(fill=FALSE) 

Обратите внимание, что, как вы не dput ваши данные, которые я не смог проверить этот код (я решил не вводить вручную в всю dataframe). Хотя я уверен, что это должно сработать, возможно, я совершил небольшую ошибку. Если вы его найдете, дайте мне знать или еще лучше: dput(earningsConst), чтобы иметь легко воспроизводимый пример.

+0

Что работало отлично, все, что мне нужно было сделать, это изменить порядок цветов на: wfGreen, wfWhite, wfRed, wfGold – user3390169

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