【问题标题】:Colouring specific points on a scatterplot with ggplot2使用 ggplot2 为散点图上的特定点着色
【发布时间】:2023-01-07 03:45:58
【问题描述】:

多年来我一直在摸不着头脑,我终生无法弄清楚自己做错了什么。

我知道这与其他几个问题非常相似,最著名的是:How to plot specific colors and shapes for ggplot2 scatter plot? 但问题是,正是按照该问题的答案,我才找到了当前的问题,但不知道出了什么问题。

所以,这是我的数据:

comb_frame <- structure(list(decode_beta = c("0.00279501", "-0.0098421", "-0.025254", 
                                             "0.00172701", "0.00531102", "0.000274217", "0.00594772859800487", 
                                             "0.000376995", "0.00082946", "0.00357124647463984", "-0.0018971", 
                                             "0.0083565", "0.00356544", "-0.000609096", "0.00167749", "-0.0150423", 
                                             "-0.022448", "-0.00242648", "-0.00190033", "-0.022692", "0.00536424", 
                                             "-0.00100278", "0.0073661", "0.00092082", "-0.00263694", "0.0076137", 
                                             "0.0072423", "-0.00081708", "-0.01708", "0.00211079", "0.0011098", 
                                             "-0.000107087", "0.0022284", "0.00068709", "-0.00562316159145804", 
                                             "0.00112658", "0.00207365", "-0.000287835", "-0.00286597", "-0.027999", 
                                             "0.00503866", "0.00305786", "-0.001238", "0.0071804", "-0.0084529", 
                                             "0.00556481", "-1.9459e-05", "0.000191271", "-0.017995", "0.002799", 
                                             "-0.024888", "-0.008418", "0.02257", "-0.008174", "-0.019886", 
                                             "-0.00492105", "0.00362115", "0.00392446", "0.00281645"), scallop_beta = c(-0.01011621546, 
                                                                                                                        0.0047657725, -0.02134944, -0.0016247829, 0.0044858415, -0.0015072187, 
                                                                                                                        -0.00782423635, -0.0013813875, -0.001077867, 0.02124057075, 0.0019690364, 
                                                                                                                        -0.004913727, 0.00098559246, 0.00302699872, -0.000395703, -0.02609645934, 
                                                                                                                        -0.02794527222, 0.000946532, 0.000786876, -0.00685633312, -0.004700096, 
                                                                                                                        0.00198448425, 0.00497280424, -0.00480984096, -0.00251334656, 
                                                                                                                        8.4434e-05, 0.00185996837, 0.001175848, -0.01947989552, -0.001227005, 
                                                                                                                        -0.0038851968, -0.00650484, -0.00262378296, 0.003949936, 0.0113079946, 
                                                                                                                        -0.00216854672, -0.000730496, 0.001289556, 0.004527388, -0.01095271456, 
                                                                                                                        0.00580293467, 0.00515290737, 0.000929589, -0.00292289712, 0.0053226888, 
                                                                                                                        -3.969984e-05, -0.0115784, 0.0030260514, -0.00695347872, 0.0092864585, 
                                                                                                                        -0.01863179184, 7.274624e-05, 0.00208976, 0.00042348704, -0.00965808, 
                                                                                                                        -0.0048684602, 0.0045743228, 0.00489489, -0.002105883), significance = c("SCAL SIG", 
                                                                                                                                                                                                 "NON SIG", "NON SIG", "NON SIG", "DEC SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "NON SIG", "SCAL SIG", "NON SIG", "DEC SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "NON SIG", "NON SIG", "DEC SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "DEC SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "SCAL SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "SCAL SIG", "NON SIG", "DEC SIG", "SCAL SIG", "NON SIG", 
                                                                                                                                                                                                 "DEC SIG", "NON SIG", "DEC SIG", "NON SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", "NON SIG", 
                                                                                                                                                                                                 "NON SIG", "SCAL SIG", "SCAL SIG", "NON SIG")), row.names = c(NA, 
                                                                                                                                                                                                                                                               -59L), class = "data.frame")

我正在尝试创建两组 beta 的散点图,然后根据它们在两个单独的数据集中(由第三列定义)各自的重要性为它们着色。

根据我分享的问题,我这样做:

comb_frame$significance = factor(comb_frame$significance, levels = (unique(comb_frame$significance))) ### First I changed significance into a factor

frame_colours = ifelse(comb_frame$significance == "DEC SIG", "#FF0000", ifelse(comb_frame$significance == "SCAL SIG", "#00A08A", "Gray")) ### I make a vector of the three colours I want

### Then I plot my graph as follows:

ggplot(comb_frame, aes(x = decode_beta, y = scallop_beta)) +
    theme_classic() +
    labs(x = "DeCODE beta (adjusted)",
         y = "SCALLOP beta (adjusted)",
         title = paste0("Proteomics PheWAS correlations ", curr_path)) +
    geom_abline(intercept = 0) +
    geom_smooth(method = "lm", se = FALSE, colour = "red") +
    geom_point(aes(colour = significance)) + 
    scale_color_manual(breaks = unique(comb_frame$significance), values = frame_colours)

这几乎可以工作并产生以下内容:

但正如您所见,它只是为一些点着色。它正确地为这些点着色,但由于某种原因它没有添加第三种颜色,我无法弄清楚出了什么问题。

我也尝试过使用重要性列而不是具有相同结果的因素来执行此操作。

【问题讨论】:

    标签: r ggplot2 geom-point


    【解决方案1】:

    OP,为scale_color_manual()中的values=参数创建的向量用于将那些values(颜色名称)映射到为color=(即combi_frame$significance)定义的变化。 combi_frame$significance 中只有 3 个级别(“SCAL SIG”、“NON SIG”和“DEC SIG”),而 frame_colours 是一个包含 59 个值的向量。因此,第一三个价值观该向量的向量按级别本身的顺序映射到三个级别。

    frame_colours 中的前 3 个值是:

    "#00A08A" "Gray"    "Gray" 
    

    这就是为什么您看到绿色 (#00A08A) 而其他颜色看起来是灰色的原因。您要做的是将 values= 设置为等于可以将颜色直接映射到每个级别的向量。我发现最简单的方法是通过命名向量.尝试用以下代码替换您的 frame_colours = ifelse(... ) 行:

    frame_colours = c(
      "DEC SIG"="#FF0000",
      "SCAL SIG"= "#00A08A",
      "NON SIG"="Gray")
    

    运行情节代码然后给你这个:

    您不必提供命名向量,但必须在 values 中指定一个向量,该向量具有至少与映射到颜色美学的级别一样多的项目.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 2021-09-29
      • 2014-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-19
      相关资源
      最近更新 更多