簡體   English   中英

R ggplot2條形圖更改特定條形的顏色

[英]R ggplot2 bar chart change color of specific bars

我有一個名為IncomeCont的數據框,將用於制作堆疊的條形圖:

                       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的顏色。 領悟

另外,為什么在將其變成條形圖之前必須將其熔化? 現在是否有辦法說series1 = earningsCont $ Total和series2 = earningsCont $ Ghost?

您正在根據Var2的值對條進行着色,該值不包含有關元素是否為后兩列之一(“ Diversification”和“ Portfolio”)的信息。 您需要在數據框中包含此信息的分組列。 您可以手動添加此代碼,也可以使用以下(笨拙的)代碼添加此代碼:

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

這將創建一個與上一個相同的新數據Var3 ,但具有四級着色列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數據,因此無法測試此代碼(我選擇不手動鍵入整個數據框)。 盡管我敢肯定這應該可行,但我可能在某個地方犯了一個小錯誤。 如果找到一個,讓我知道,或者更好的是dput(earningsConst) ,以便有一個容易復制的示例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM