使用R绘制分类数据的图表

5
我有一份蛋白质名称列表(P1,P2... Pn),它们按照在三种实验条件(Exp1、Exp2 和 Exp3)下的不同表达水平分为三类:高(H)、中(M)和低(L)。
我希望创建一个绘图,类似于页面底部的图片,左侧显示蛋白质名称,顶部显示实验名称,并用红色、蓝色和绿色表示高、中和低级别。
我是R新手,非常感谢任何帮助。
提前致谢!
2个回答

7
您可以创建一个格式如下(以制表符分隔)的数据文件:
pv   exp  val
1    1    H
2    1    L
3    1    L
4    1    M
1    2    H
2    2    H
3    2    M
4    2    H
1    3    L
2    3    L
3    3    L
4    3    M

使用以下命令来获取和绘制数据:

mat <- read.table(file.choose(),header=T) # 将文件读入内存

attach(mat) # 将标题名称映射到变量名称

plot(pv~exp,col=val) # 绘制类别之间的关系,并使用val (H,M,L)作为颜色数组。R将自动将这些值分配给颜色。您还可以使用val数组创建一个颜色数组,将(H,M,L)翻译为(蓝色,红色,绿色)...但是有其他文档可以参考。


使用with()比使用attach()更安全:with(mat, plot(pv~exp,col=val) ) - IRTFM
您正在使用公式,因此请使用“_supply_”参数数据,而不是使用with()或attach()。 - Gavin Simpson

5

这里提供一种使用ggplot2reshape2包的方法。

首先,按照您描述的格式重新创建数据:

df <- data.frame(
    P    = paste("P", 1:4, sep=""),
    Exp1 = c("L", "H", "L", "M"),
    Exp2 = c("M", "M", "L", "H"),
    Exp3 = c("H", "L", "L", "M"))

接下来,加载附加包:

library(reshape2)
library(ggplot2)

然后,使用melt()将您的数据从宽格式转换为长格式。id变量是“P”,我们告诉函数将“variable”重命名为“Exp”:
mdf <- melt(df, id.vars="P", variable="Exp")

因为 L - M - H 有语义顺序,我们使用 factor()ordered 参数来告知 R 这个顺序:

mdf$value <- factor(mdf$value, levels=c("H", "M", "L"), ordered=TRUE)

最后,我们准备好绘制您的数据:

ggplot(mdf, aes(x=Exp, y=P, colour=value)) + 
    geom_point(size=3) + 
    scale_colour_manual(value=c("red", "green", "blue")) +
    xlab("") + 
    ylab("")

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接