ggplot2:更改条形图

时间:2015-12-02 12:54:18

标签: r colors ggplot2 facet geom-bar

我用ggplot2完成了一个带有此代码的刻面条形图:

ggplot(data_long, aes(x=region, y=wert)) + 
geom_bar(aes(fill = kat ), position = "dodge", width=.5, stat="identity") +
labs(y = "Wähleranteil [ % ]", x = NULL, fill = NULL) +
facet_grid(. ~ type) +
theme_bw() + theme( strip.background  = element_blank(),
                    panel.grid.major = element_line(colour = "grey80"),
                    panel.border = element_blank(),
                    axis.ticks = element_blank(),
                    panel.grid.minor.x=element_blank(),
                    panel.grid.major.x=element_blank() ) +
theme(legend.position="bottom") +
guides(fill=guide_legend(nrow=1,byrow=TRUE))

faceted bar chart

我希望每个方面都有自己的颜色,如下所示:

    partei   color
1 andere #636363
2    BDP #D0B100
3    CVP #FF8B07
4    EVP #65ECEF
5    FDP #5675D6
6    glp #77E599
7  Grüne #A3DD57
8     SP #CE2929
9    SVP #428953

图表看起来与此类似: colored bar chart

因此,每个方面都应该有自己的颜色,来自数据框,2011年的值应该比2015年的值更亮。

如何做到这一点?

数据:

    type region     label  kat wert
1     SVP     de    SVP de 2011 29.3
2     SVP     fr    SVP fr 2011 20.2
3     SVP     it    SVP it 2011 10.3
4   Grüne     de  Grüne de 2011  8.1
5   Grüne     fr  Grüne fr 2011 10.2
6   Grüne     it  Grüne it 2011  6.6
7     FDP     de    FDP de 2011 13.1
8     FDP     fr    FDP fr 2011 20.2
9     FDP     it    FDP it 2011 24.3
10     SP     de     SP de 2011 17.6
11     SP     fr     SP fr 2011 23.2
12     SP     it     SP it 2011 16.8
13    EVP     de    EVP de 2011  2.6
14    EVP     fr    EVP fr 2011  1.5
15    EVP     it    EVP it 2011  0.0
16    glp     de    glp de 2011  6.4
17    glp     fr    glp fr 2011  2.8
18    glp     it    glp it 2011  0.1
19 andere     de andere de 2011  2.4
20 andere     fr andere fr 2011  1.3
21 andere     it andere it 2011  3.3
22    CVP     de    CVP de 2011 11.5
23    CVP     fr    CVP fr 2011 13.4
24    CVP     it    CVP it 2011 20.3
25    BDP     de    BDP de 2011  7.0
26    BDP     fr    BDP fr 2011  0.8
27    BDP     it    BDP it 2011  0.3
28    SVP     de    SVP de 2015 32.9
29    SVP     fr    SVP fr 2015 21.0
30    SVP     it    SVP it 2015 12.1
31  Grüne     de  Grüne de 2015  6.7
32  Grüne     fr  Grüne fr 2015  9.1
33  Grüne     it  Grüne it 2015  3.4
34    FDP     de    FDP de 2015 14.3
35    FDP     fr    FDP fr 2015 22.1
36    FDP     it    FDP it 2015 23.3
37     SP     de     SP de 2015 18.4
38     SP     fr     SP fr 2015 21.1
39     SP     it     SP it 2015 16.1
40    EVP     de    EVP de 2015  2.4
41    EVP     fr    EVP fr 2015  1.5
42    EVP     it    EVP it 2015  0.0
43    glp     de    glp de 2015  5.5
44    glp     fr    glp fr 2015  2.4
45    glp     it    glp it 2015  0.9
46 andere     de andere de 2015  2.7
47 andere     fr andere fr 2015  1.3
48 andere     it andere it 2015  2.3
49    CVP     de    CVP de 2015 10.2
50    CVP     fr    CVP fr 2015 14.9
51    CVP     it    CVP it 2015 20.1
52    BDP     de    BDP de 2015  5.2
53    BDP     fr    BDP fr 2015  1.1
54    BDP     it    BDP it 2015  0.2

2 个答案:

答案 0 :(得分:9)

我不确定这是传达您的信息的最佳方式,但这就是我接近它的方式。只需将填充映射到区域,然后使用alpha作为年份。我的与你的有点不同,因为你没有提供数据的结构。

ggplot(data_long, aes(type, wert)) + geom_bar(aes(fill = region, alpha = factor(kat)), position = "dodge", stat = "identity") + 
  scale_alpha_manual(values = c(0.6, 1)) +
  facet_grid(. ~ region) +
  theme_bw() + theme( strip.background  = element_blank(),
                      panel.grid.major = element_line(colour = "grey80"),
                      panel.border = element_blank(),
                      axis.ticks = element_blank(),
                      panel.grid.minor.x=element_blank(),
                      panel.grid.major.x=element_blank() ) +
  theme(legend.position="bottom")

enter image description here

答案 1 :(得分:2)

根据@alexwhan的答案,我可以使用以下代码手动设置颜色:

  farb <- c("#428953", "#CE2929", "#A3DD57", "#77E599", "#5675D6", "#65ECEF", "#FF8B07", "#D0B100", "#636363")

  ggplot(data_long, aes(region, wert)) +
  geom_bar(aes(fill = type, alpha = factor(kat)), position = "dodge", stat = "identity") + 
  scale_alpha_manual(values = c(0.6, 1)) +
  facet_grid(. ~ type) +
  theme_bw() + theme( strip.background  = element_blank(),
                      panel.grid.major = element_line(colour = "grey80"),
                      panel.border = element_blank(),
                      axis.ticks = element_blank(),
                      panel.grid.minor.x=element_blank(),
                      panel.grid.major.x=element_blank() ) +
  theme(legend.position="bottom") +
  scale_fill_manual(values= farb)

色标farb必须与构面的顺序相同。生成此图表: colored facets