【问题标题】:Creating a scatter plot for multiple rows in R在 R 中为多行创建散点图
【发布时间】:2012-11-19 22:18:24
【问题描述】:

我有一个看起来像这样的数据框:

        Samp1    Samp2    Samp3     Samp4    Samp5
Gene1    84.1     45.2     34.3      54.6     76.2
Gene2    94.2     12.4     68.0      75.3     24.8
Gene3    29.5     10.5     43.2      39.5     45.5
...

我正在尝试创建一个散点图,其中 x 轴是样本(Samp1-5),y 轴是行(Gene1-3 等),但我想要每一行的数据在同一个图上绘制为不同的颜色。

关于如何在 R 中执行此操作的任何想法?我非常愿意在 R 中使用 ggplot2、lattice、car 或任何其他包。

【问题讨论】:

  • 仅供参考:当您碰巧得到解决问题的答案时,如果您单击解决问题的答案旁边的小复选标记,这对整个网站非常有帮助。这样,未来的读者肯定知道该答案解决了您的问题。 (当然,只有当答案确实解决了您的问题时,您才应该这样做。)
  • 好的,谢谢@joran。会做 - 虽然我还没有解决这个问题。

标签: r plot ggplot2 lattice scatter-plot


【解决方案1】:

这是ggplot2的解决方案:

数据:

dat <- read.table(text="Samp1    Samp2    Samp3     Samp4    Samp5
  Gene1    84.1     45.2     34.3      54.6     76.2
  Gene2    94.2     12.4     68.0      75.3     24.8
  Gene3    29.5     10.5     43.2      39.5     45.5", header = TRUE)

剧情:

library(ggplot2)  
ggplot(stack(dat), aes(x = ind, y = values, colour = rownames(dat))) +
  geom_point()

【讨论】:

  • 您好,为什么我在尝试重现您的示例时会出现此错误?错误:美学长度必须为 1,或与 dataProblems:rownames(dat) 长度相同
【解决方案2】:

如果您想在 lattice 或 ggplot2 中执行此操作,那么您可能需要将数据重塑为长格式,请参阅 reshape 函数或 reshape2 包。

对于基本图形,matplot 函数可能会执行您想要的操作,如果您不想要数字 1 到 5,您可能需要抑制 x 轴并使用 axis 函数添加您自己的作为轴刻度线。

【讨论】:

    【解决方案3】:

    将数据放入矩阵中:

    foo <- as.matrix(structure(list(Samp1 = c(84.1, 94.2, 29.5),
        Samp2 = c(45.2, 12.4, 10.5),Samp3 = c(34.3, 68, 43.2),
        Samp4 = c(54.6, 75.3, 39.5),Samp5 = c(76.2, 24.8, 45.5)),
      .Names = c("Samp1", "Samp2","Samp3", "Samp4", "Samp5"),
      class = "data.frame", row.names = c("Gene1","Gene2", "Gene3")))
    

    还有情节:

    plot(seq(1,ncol(foo)),foo[1,],xlab="",ylab="",xaxt="n",
      pch=21,bg=1,ylim=c(min(foo),max(foo)))
    axis(side=1,at=seq(1,ncol(foo)),labels=colnames(foo))
    for ( ii in 2:nrow(foo) ) points(seq(1,ncol(foo)),foo[ii,],pch=21,col=ii,bg=ii)
    

    请注意,我正在按颜色循环显示它们的数字 (col=ii,bg=ii)。见?palette

    您可能还想查看?legend

    【讨论】:

      【解决方案4】:

      在引入 tidyverse 之后,推荐的方式是使用 tidyr 将数据转换为长格式。例如

      dat <- read.table(text="Gene Samp1    Samp2    Samp3     Samp4    Samp5
        Gene1    84.1     45.2     34.3      54.6     76.2
        Gene2    94.2     12.4     68.0      75.3     24.8
        Gene3    29.5     10.5     43.2      39.5     45.5", header = TRUE)
      
      dat %>% 
        # transform data to long form
        tidyr::gather("sample", "value", contains("Samp")) %>%
        # plot the data
        ggplot(aes(x = sample, y = value, col = Gene)) + geom_point()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-25
        • 2016-05-10
        • 1970-01-01
        • 2013-02-01
        • 2013-02-13
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        相关资源
        最近更新 更多