我在R和编码方面还很陌生,所以我不知道如何在本网站上很好地解释它,但找不到更好的论坛问。
基本上我有一个6x6的矩阵,每一行都是一个离散基因,每一列都是一个样本。
我希望将基因作为x轴和y轴作为样本的值,以便每个基因将在其各自的值上方有6个样本。
我在Excel中有这个矩阵,当我突出显示它并对其进行绘制时,它恰好提供了我想要的。
但是,尝试在R中将其重新复制,充其量只能给我一个巨大的晶格图。
我已经尝试过boxplot()
,scatterchart()
,plot()
和ggplot()
。
我假设我必须更改矩阵,但我不知道如何。
答案 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')
您还可以将ggplot
与geom_point
美学或geom_jitter
结合使用-例如:
ggplot() +
geom_jitter(mapping = aes(x = rep(1:6, times = 6), y = as.numeric(unlist(data.frame(df1)))))
请注意,您还可以在x值上使用rnorm()
在基础R中创建“抖动”效果,并使用rnorm()
函数的最后一个参数来调整抖动量:
plot(x = rep(1:6, times = 6) + rnorm(36, 0, 0.05), y = unlist(df1), xlab = 'Gene', ylab = 'Value')