我有一个具有以下形式的数据框:
V1 V2 V3 V4 V5 V6 V7 V8
1 0610007C21Rik - chr5:31351012-31356737 1.33732e-05 0.752381 0.9965090 0.000000 1.777419e-05
2 0610007L01Rik - chr5:130695613-130717165 1.67168e+00 1.673120 0.0000000 3.453930 4.997847e-01
3 0610007P08Rik - chr13:63916627-64000808 7.06033e-01 0.000000 0.0815767 0.318051 1.000000e+00
4 0610007P14Rik - chr12:87157066-87165495 0.00000e+00 0.000000 0.0000000 5.494230 NaN
5 0610007P22Rik - chr17:25377114-25379603 4.99696e+00 0.908254 0.9076130 3.639250 8.461946e-01
6 0610009B22Rik - chr11:51499151-51502136 6.53363e-01 8.500980 13.5797000 0.000000 7.137192e-02
我正在使用以下命令绘制 log2(V4) 与 log2(V5) 的图:
plot(log2(df[,4]) ~ log2(df[,5]), xlim=c(0,10), ylim=c(0,10))
我想根据 V1 中的模式匹配为点着色。例如,如何将 0610007C21Rik 和 0610007L01Rik 着色为绿色,以及 0610007P22Rik 和 0610007P14Rik 着色为红色? 我尝试过向数据框中添加指定颜色的另一列,但必须有一种更简单的方法。
最佳答案
这是一个基本的 R 解决方案:
为 df$V1
的每个唯一值将颜色列表定义为命名向量一次。请注意每个要着色的点名称周围的 ""
。
col.list <- c(
"0610007C21Rik"="green",
"0610007L01Rik"="green",
"0610007P22Rik"="red",
"0610007P14Rik"="red"
)
然后使用 df$V1
进行绘图,以查找刚刚定义的 col.list
向量中的值。
plot(
log2(df[,4]) ~ log2(df[,5]),
xlim=c(0,10),
ylim=c(0,10),
col=col.list[paste(df$V1)]
)
要解决下面OP的评论,请在plot
调用中使用它:
... col=ifelse(df$V1 %in% names(col.list),col.list[paste(df$V1)],"black")
这使得完整的调用看起来像:
plot(
log2(df[,4]) ~ log2(df[,5]),
xlim=c(0,10),
ylim=c(0,10),
col=ifelse(df$V1 %in% names(col.list),col.list[paste(df$V1)],"black")
)
关于r - 如何根据模式匹配在 R 中为数据点着色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11171817/