【问题标题】:Color data points based on sample classification基于样本分类的颜色数据点
【发布时间】:2015-01-17 05:45:38
【问题描述】:

创建了显示跨多个样本(数据框中的行)的基因(数据框中的列)之间的关系的成对散点图。样本属于两个不同的组:组“A”和“B”。由于图中的一个点代表一个样本,我需要根据具有两种不同颜色的组对数据点(点)进行着色,例如 A 组为“绿色”,B 组为“红色”。有可能这样做吗?

我们将不胜感激。

plot(DF[1:6], pch = 21) #绘图命令,DF为数据框

示例数据框示例:

       CBX3     PSPH     ATP2C1    SNX10     MMD      ATP13A3
B     10.589844 6.842970 8.084550  8.475023  9.202490 10.403811
A     10.174385 5.517944 7.736994  9.094834  9.253766 10.133408
B     10.202084 5.669137 7.392141  7.522270  7.830969  9.123178
B     10.893231 6.630709 7.601690  7.894177  8.979142  9.791841
B     10.071038 5.091222 7.032585  8.305581  7.903737  8.994821
A     10.005002 4.708631 7.927246  7.292527  8.257853  10.054630
B     10.028055 5.080944 6.421961  7.616856  8.287496  9.642294
A     10.144115 6.626483 7.686203  7.970934  7.919615  9.475175
A     10.675386 6.874047 7.900560  7.605519  8.585158  8.858613
A     9.855063  5.164399 6.847923  8.072608  8.221344  9.077744
A     10.994228 6.545318 8.606128  8.426329  8.787876  9.857079
A     10.501266 6.677360 7.787168  8.444976  8.928174  9.542558

【问题讨论】:

    标签: r


    【解决方案1】:

    GGally 对此也有很好的功能。

    library(GGally)
    ggpairs(dd, color = 'CLASS',columns = 2:ncol(dd) )
    

    【讨论】:

      【解决方案2】:

      使用基本图形可能并不容易。你可以很容易地用格子做到这一点。有了这个示例 data.frame

      dd<-structure(list(CLASS = structure(c(2L, 1L, 2L, 2L, 2L, 1L, 2L, 
      1L, 1L, 1L, 1L, 1L), .Label = c("A", "B"), class = "factor"), 
          CBX3 = c(10.589844, 10.174385, 10.202084, 10.893231, 10.071038, 
          10.005002, 10.028055, 10.144115, 10.675386, 9.855063, 10.994228, 
          10.501266), PSPH = c(6.84297, 5.517944, 5.669137, 6.630709, 
          5.091222, 4.708631, 5.080944, 6.626483, 6.874047, 5.164399, 
          6.545318, 6.67736), ATP2C1 = c(8.08455, 7.736994, 7.392141, 
          7.60169, 7.032585, 7.927246, 6.421961, 7.686203, 7.90056, 
          6.847923, 8.606128, 7.787168), SNX10 = c(8.475023, 9.094834, 
          7.52227, 7.894177, 8.305581, 7.292527, 7.616856, 7.970934, 
          7.605519, 8.072608, 8.426329, 8.444976), MMD = c(9.20249, 
          9.253766, 7.830969, 8.979142, 7.903737, 8.257853, 8.287496, 
          7.919615, 8.585158, 8.221344, 8.787876, 8.928174), ATP13A3 = c(10.403811, 
          10.133408, 9.123178, 9.791841, 8.994821, 10.05463, 9.642294, 
          9.475175, 8.858613, 9.077744, 9.857079, 9.542558)), .Names = c("CLASS", 
      "CBX3", "PSPH", "ATP2C1", "SNX10", "MMD", "ATP13A3"), class = "data.frame", row.names = c(NA, -12L))
      

      你可以的

      library(lattice)
      splom(~dd[,-1], groups=dd$CLASS)
      

      得到

      【讨论】:

        【解决方案3】:

        您可以通过指定参数col 为点添加颜色 绘制

        DF <-  read.delim(textConnection(
        "category   CBX3    PSPH    ATP2C1  SNX10   MMD ATP13A3
        B   10.589844   6.842970    8.084550    8.475023    9.202490    10.403811
        A   10.174385   5.517944    7.736994    9.094834    9.253766    10.133408
        B   10.202084   5.669137    7.392141    7.522270    7.830969    9.123178
        B   10.893231   6.630709    7.601690    7.894177    8.979142    9.791841
        B   10.071038   5.091222    7.032585    8.305581    7.903737    8.994821
        A   10.005002   4.708631    7.927246    7.292527    8.257853    10.054630
        B   10.028055   5.080944    6.421961    7.616856    8.287496    9.642294
        A   10.144115   6.626483    7.686203    7.970934    7.919615    9.475175
        A   10.675386   6.874047    7.900560    7.605519    8.585158    8.858613
        A   9.855063    5.164399    6.847923    8.072608    8.221344    9.077744
        A   10.994228   6.545318    8.606128    8.426329    8.787876    9.857079
        A   10.501266   6.677360    7.787168    8.444976    8.928174    9.542558"))
        
        plot(DF[2:7],col = ifelse(DF$category == 'A','red','green'))
        

        可以通过调用colors() 获取有效颜色值列表。可以通过rainbow()创建带有渐变颜色的矢量,只是为了好玩,我在制作图形时使用这个小功能选择漂亮的颜色。

        (根据@MrFlick 的建议编辑)

        #! @param n The number of colors to be selected
        colorchoose <- function (n = 1, alpha, term = F) 
        {
            cols <- colors()
            mod <- ceiling(sqrt(length(cols)))
            plot(xlab = "", ylab = "", main = "click for color name", 
                c(0, mod), c(0, mod), type = "n", axes = F)
            s<-seq_along(cols)
            dev.hold()
            points(s%%mod, s%/%mod, col = cols, pch = 15, cex = 2.4)
            dev.flush()
            p <- locator(n)
            return(cols[round(p$y) * mod + round(p$x)])
        }
        

        【讨论】:

        • 你的colorchoose()函数很有趣;但它对我来说画得很慢。您应该考虑在 for 循环之前添加 dev.hold() 并在之后添加 dev.flush()。或者更好的是,使用 s&lt;-seq_along(cols);points(s%%mod, s%/%mod, col = cols, pch = 15, cex = 2.4) 摆脱 for 循环
        • @MrFlick 这些是很好的建议。我大约 8 年前写了这篇文章,从那以后就再也没有碰过它。它在 Windows 上渲染速度很快,在 Mac 上渲染速度很慢。 (我的大部分工作,直到最近一直在窗口机器上)
        • 是的,我在 Mac 上进行测试。我提出的两个建议都大大缩短了渲染时间。
        猜你喜欢
        • 2016-09-03
        • 1970-01-01
        • 2019-11-27
        • 1970-01-01
        • 1970-01-01
        • 2019-10-22
        • 1970-01-01
        • 1970-01-01
        • 2014-10-30
        相关资源
        最近更新 更多