1

嗨,我正在编写一个 R 函数来使用 ggplot2 生成波动图

fluctuation <- function(filename)
    x=read.table(filename,sep=",")

    mydata=melt(x)$value
    mydata=matrix(mydata,ncol=4, byrow=T)
    colnames(mydata) <-c("AA", "AB", "BB","no.call")
    rownames(mydata) <-c("AA", "AB", "BB", "no.call")

    data.melt=melt(mydata)

    names(data.melt)<-c("pgm", "truth", "value")

    p <- ggfluctuation(data.melt)+ xlab("Truth") + ylab("Pgmsnp") 

    p2 <- p  + geom_text(aes(label=data.melt$value),colour="black", main="whole-exome capture")


    return (p2)

当我运行此代码时:

fluctuation("file.csv")

我收到以下错误:

Error in eval(expr, envir, enclos) : object 'data.melt' not found

但是,如果我返回 p,那很好。所以有一些问题

geom_text(aes(label=data.melt$value),colour="black", main="whole-exome capture")

但我无法弄清楚。我还是个 ggplot2 新手。我四处搜索并发现了类似的问题,但我似乎无法修复我的实例。有人可以帮我指出正确的方向吗?

4

2 回答 2

1

的操作我不是很熟悉`ggfluctuation(),但是如果和其他ggplot函数类似的话,应该改成

p <- ggfluctuation(data.melt)+ xlab("Truth") + ylab("Pgmsnp") 
p2 <- p  + geom_text(aes(label=value),colour="black", main="whole-exome capture")

ggplot 图层从原始图层继承数据框ggplot(),或者在本例中为ggfluctuation()图层。aes()在映射变量时查看它继承的数据框,因此在这种情况下,仅使用aes(label=value).

于 2013-06-07T04:36:04.587 回答
0

好吧,关于 R 如何处理函数,我有些不明白。如果我明确地 glob 我的所有输入文件,然后通过遍历我想要为其制作绘图的文件输入列表来制作绘图,它就可以工作。

library("ggplot2")
library("reshape2")



files <- dir(getwd(), pattern = "*.csv", full.names = FALSE)

for (i in 1:length(files)) {

    x=read.table(files[i],sep=",")
    mydata=melt(x)$value
    mydata=matrix(mydata,ncol=4, byrow=T)
    colnames(mydata) <-c("AA", "AB", "BB","no.call")
    rownames(mydata) <-c("AA", "AB", "BB", "no.call")

    data.melt=melt(mydata)

    names(data.melt)<-c("pgm", "truth", "value")
    plotname <- paste(files[i], "png", sep=".")
    p <- ggfluctuation(data.melt) + geom_text(aes(label=data.melt$value)) +xlab("Truth") + ylab("Pgmsnp") + theme(axis.text.x= element_text(size=rel(1.5))) + theme(axis.text.y= element_text(size=rel(1.5))) + theme(axis.title.x = element_text(size = rel(1.5))) + theme(axis.title.y= element_text(size = rel(1.5))) +  opts(title = files[i]) + theme(plot.title = element_text(size = rel(.95)))
    ggsave(p, file=plotname)



}
于 2013-06-07T15:01:51.887 回答