繁体   English   中英

使用 ggplot2 为散点图上的特定点着色

[英]Colouring specific points on a scatterplot with ggplot2

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

我知道这与其他一些问题非常相似,最值得注意的是: 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)

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

绘图输出

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

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

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

frame_colours中的前 3 个值是:

"#00A08A" "Gray"    "Gray" 

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

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

运行 plot 代码然后会得到以下信息:

在此处输入图像描述

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM