在R中为多行创建散点图

时间:2012-11-19 22:18:24

标签: r plot ggplot2 lattice scatter-plot

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

        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,格子,汽车或任何其他包装。

4 个答案:

答案 0 :(得分:2)

以下是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()

enter image description here

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

将数据放入矩阵:

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

scatterplot

答案 3 :(得分:0)

在引入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()