我的数据框看起来像这样:
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,格子,汽车或任何其他包装。
答案 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()
答案 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
。
答案 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()