library(ggplot2)
library(reshape2)
library(plyr)
归一化
range01 <- function(v) {
rng <- range(v,na.rm = T)
(v-rng[1]) / diff(rng)
}
宽数据转为长数据
pcp_data <- function(df) {
num <- laply(df,is.numeric)
df[num] <- colwise(range01)(df[num])
df$.row <- rownames(df) #df$.row是字符串类型,在绘图函数中有分组作用
dfm <- melt(df,id=c(names(df)[!num]))
class(dfm) <- c("pcp",class(dfm)) #这一步目的是什么?
dfm
}
绘图函数
pcp <- function(df, ...) {
df2 <- pcp_data(df)
ggplot(df2,aes(variable,value))+geom_line(aes(group=.row,color=.row),size=2)
}
测试
> test <- read.table("test.txt",header = T)
> test
RNA X2005 X2006 X2007 X2008 X2009
1 piRNA 1 3 2 2 1
2 mRNA 1 1 2 1 3
3 miRNA 4 4 5 3 1
4 lncRNA 3 5 1 2 4
5 circRNA 1 2 1 1 1
> pcp(test)

为啥要叫“平行坐标图”?
网友评论