R:如何从具有离散x轴的矩阵数据中获取散点图

时间:2019-06-18 22:24:40

标签: r

我在R和编码方面还很陌生,所以我不知道如何在本网站上很好地解释它,但找不到更好的论坛问。
基本上我有一个6x6的矩阵,每一行都是一个离散基因,每一列都是一个样本。
我希望将基因作为x轴和y轴作为样本的值,以便每个基因将在其各自的值上方有6个样本。
我在Excel中有这个矩阵,当我突出显示它并对其进行绘制时,它恰好提供了我想要的。
但是,尝试在R中将其重新复制,充其量只能给我一个巨大的晶格图。

我已经尝试过boxplot()scatterchart()plot()ggplot()
我假设我必须更改矩阵,但我不知道如何。

2 个答案:

答案 0 :(得分:1)

这可能有帮助:

library(tidyverse)


gene <- c("a", "b", "c", "d", "e", "f")
x1 <- c(1,2,3,4,5,6)
x2 <- c(2,3,4,5,-6,7)
x3 <- c(3,4,5,6,7,8)
x4 <- c(4,-5,6,7,8,9)
x5 <- c(9,8,7,6,5,4)
x6 <- c(5,4,3,2,-1,0)

df <- data.frame(gene, x1, x2, x3, x4, x5, x6) #creates data.frame
as_tibble(df) # convenient way to check data.frame values and column format types
df <- df %>% gather(sample, observation, 2:7) # here's the conversion to long format
as_tibble(df)  #watch df change

#example plots

p1 <- ggplot(df, aes(x = gene, y = observation, color = sample)) + geom_point()
p1
p2 <- ggplot(df, aes(x = gene, y = observation, group = sample, color = sample)) +
                 geom_line()
p2
p3 <- p2 + geom_point()
p3

答案 1 :(得分:0)

这很容易解决-如果矩阵是6x6,每行一个基因,每列一个观察值(因此每个基因六个观察值),则首先需要将其设为长格式(36行)-使用这种简单格式可以使用unlist-然后将其与代表基因的数字向量相对应:

# Here I make some dummy data - a 6x6 matrix of random numbers:
df1 <- matrix(rnorm(36,0,1), ncol = 6)

# To help show which way the data unlists, and make the 
#   genes different, I add 4 to gene 1:
df1[1,] <- df1[1,] + 4

#### TL;DR - HERE IS THE SOULTION ####
# Then plot it, using rep to make the x-axis data vector
plot(x = rep(1:6, times = 6), y = unlist(df1))

要提高可读性,请添加轴标签:

# With axis labels
plot(x = rep(1:6, times = 6), y = unlist(df1), 
  xlab = 'Gene', ylab = 'Value')

enter image description here

您还可以将ggplotgeom_point美学或geom_jitter结合使用-例如:

ggplot() +
  geom_jitter(mapping = aes(x = rep(1:6, times = 6), y = as.numeric(unlist(data.frame(df1)))))

enter image description here

请注意,您还可以在x值上使用rnorm()在基础R中创建“抖动”效果,并使用rnorm()函数的最后一个参数来调整抖动量:

plot(x = rep(1:6, times = 6) + rnorm(36, 0, 0.05), y = unlist(df1), xlab = 'Gene', ylab = 'Value')

enter image description here