【问题标题】:Color Scheme In ggplot2 facet_wrapggplot2 facet_wrap 中的配色方案
【发布时间】:2017-04-25 15:30:24
【问题描述】:

我正在制作多个散点图来显示交互。我使用 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")

这给了我以下情节:

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

有什么建议吗?

【问题讨论】:

  • 您在variablevalue 列中似乎有不止一种测量类型。例如,您至少在这些列中同时具有性别和行业。如果您在融化之前向我们展示您的数据样本(将dput(data_sample) 的输出粘贴到您的问题中)并告诉使用您打算使用variablevalue 实际表示的内容,我们可以帮助您正确地塑造您的数据。
  • @eipi10 感谢您的建议,我添加了更多代码。
  • 基本上我只是不喜欢配色方案,因为它很难看。我想做的另一件事是让每个点变黑,但每条回归线都变成不同的颜色?只是为了让这些交互更容易看到。

标签: r plot ggplot2 data-science


【解决方案1】:

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

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

目的是为女性变量获取手动色标,并为行业变量使用相同方案。

要使用的颜色。我只指定了 2 个,您需要更多颜色,因为您的某些变量的值超过 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 来设置透明度。

【讨论】:

  • 你是个英雄。谢谢。
  • 不客气。如果这对您有用,您会将答案标记为已接受并投赞成票。谢谢
猜你喜欢
  • 2021-12-10
  • 2011-08-24
  • 2020-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
相关资源
最近更新 更多