ggplot2回顾(14): 绘图函数--以平行坐标图为例

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)

为啥要叫“平行坐标图”?

你可能感兴趣的:(ggplot2回顾(14): 绘图函数--以平行坐标图为例)