颜色方案在ggplot2 facet_wrap中

时间:2017-04-25 15:30:24

标签: r plot ggplot2 data-science

我正在制作一个多重散点图以显示交互。我使用reshape2包中的melt函数使我的数据看起来像这样:

head(wage)
  money educ exper tenure nonwhite female    married numdep smsa Region Industry
1  3.10   11     2      0    White Female Notmarried      2    1   west    other
2  3.24   12    22      2    White Female    Married      3    1   west services
3  3.00   11     2      0    White   Male Notmarried      2    0   west    trade
4  6.00    8    44     28    White   Male    Married      0    1   west  clerocc
5  5.30   12     7      2    White   Male    Married      1    0   west    other
6  8.75   16     9      8    White   Male    Married      0    1   west profserv


test1 = wage %>% select(money, educ, female, nonwhite, married, smsa, Region, Industry)
test1a = melt(test1, id.vars= c('money', 'educ'))

head(test1a)

      money educ variable  value
    1  3.10   11   female Female
    2  3.24   12   female Female
    3  3.00   11   female   Male
    4  6.00    8   female   Male
    5  5.30   12   female   Male
    6  8.75   16   female   Male

tail(test1a)
         money educ variable    value
    3151  5.65   12 Industry construc
    3152 15.00   16 Industry profserv
    3153  2.27   10 Industry    trade
    3154  4.67   15 Industry construc
    3155 11.56   16 Industry   nondur
    3156  3.50   14 Industry profserv

我使用的ggplot功能是:

ggplot(test1a, aes(educ,money, col = value )) + geom_point()+
  facet_wrap(~ variable) + geom_smooth(method = 'lm', se = FALSE) +
  theme(legend.position="none")

这给了我以下情节: Plot

这正是我正在寻找的,除了我希望所有6个绘图具有相同的配色方案。换句话说,我希望所有6个图都具有与左上角相同的绿色/黄色图。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

我生成了一些数据来说明这个答案

test1a <- data.frame(money = rnorm(10), educ = rnorm(10), 
                     variable = c("female","female","female","female","female","Industry","Industry","Industry","Industry","Industry"),
                     value = c("Female", "Female", "Male", "Male", "Female", "construc", "construc", "trade", "trade", "trade"))

        money         educ variable    value
1   0.6509500  0.822198786   female   Female
2  -0.7038793  0.257554982   female   Female
3  -0.9110664 -1.048976078   female     Male
4   0.1313963 -1.398813412   female     Male
5  -0.6050824  0.818251963   female   Female
6   1.2937046 -0.289675281 Industry construc
7   1.1670726 -0.004767622 Industry construc
8   0.3489473 -0.633061650 Industry    trade
9  -0.1536924 -0.567433569 Industry    trade
10  1.3932668 -0.010446676 Industry    trade

使用的库

library(ggplot2)
library(dplyr)

首先获取一个使用变量值的表

uniqueVarVal <- unique(test1a[,3:4])

  variable    value
1   female   Female
3   female     Male
6 Industry construc
8 Industry    trade

目的是获得女性变量的手动色标,并使用相同方案用于Industry变量。

要使用的颜色。我只指定了2,你需要更多颜色,因为你的一些变量有两个以上的值。

colors <- c("red", "green")

将要使用的颜色添加到变量值表

colValues <- uniqueVarVal %>%
    group_by(variable) %>%
    mutate(color = colors[row_number()]) %>%
    ungroup()

# A tibble: 4 × 3
  variable    value color
    <fctr>   <fctr> <chr>
1   female   Female   red
2   female     Male green
3 Industry construc   red
4 Industry    trade green

接下来我们需要设置value变量的级别,否则ggplot会按字母顺序排列它们。

test1a$value <- factor(test1a$value, levels = colValues$value)

最后使用重复的图案指定手动色标,红绿色。

ggplot(test1a, aes(educ,money, col = value )) +
    geom_point(alpha = 0.3) +
    geom_smooth(method = 'lm', se = FALSE)  +
    scale_color_manual(values = colValues$color) +
    facet_wrap(~ variable) 

我已经离开了传奇,所以你可以看到发生了什么。

考虑到你的分数密度,我建议使用alpha来设置透明度。 enter image description here