在R中绘制多个函数

时间:2010-02-03 02:11:16

标签: r function statistics plot

我之前曾问过这个question这对绘制函数很有用。我想尝试在相同的轴上绘制20个函数,以说明函数在两个范围之间的变化。我已经使用单独指定的函数成功完成了此操作,但我想使用循环来完成此操作。

我试图做的是:

## add ggplot2
library(ggplot2)
library(lattice)

# Declare local variables
inPath = "D:/R_Analysis/"
inFile = "sample.txt"

outPath = "D:/R_Analysis/"
outFile = "processed_sample.txt"

pdfOutPath = "D:/R_Analysis/"
pdfOutFile = "processed_sample.pdf"

# Declare Chart values
y_label = "x-axis"
x_label = "y-axis"
chart_title = "..." 

#####################################################################
## Read in data;  
analysis <- 
read.table(paste(inPath, inFile, sep=""), header=TRUE, sep=",", 
na.strings="NA",  dec=".", strip.white=TRUE)

# Setup pdf
pdf(paste(pdfOutPath, pdfOutFile, sep=""),height=6,width=9)

# make plot object    
p <- qplot(
data = data.frame(x = x, y = y), x, y, xlab = x_label, ylab = y_label, 
enter code herexlim = x_range, main = chart_title  )

# make empty function
eq_dummy = function(x){ 0 }
d = stat_function(fun = eq_dummy)

##############
# LOOP #######

for(i in 1 : 21){                                            

        # Specify Variables
        intercept = analysis[i,2]
        slope = analysis[i,3]    

        # Define Curve    
        eq <- function(x) { slope * log(x) + intercept }

        # Make plot object            
        composite <- stat_function(fun=eq)        
        composite = composite + d       

}

print(p + composite)  

# Show warnings
warnings()

# close the PDF file
dev.off() 

有关语法改进或编程结构的任何建议都将受到赞赏。谢谢。

2 个答案:

答案 0 :(得分:3)

有一个很好的函数file.path,允许创建独立于OS的文件路径。您可以在代码中使用它:

inPath = file.path("D:","R_Analysis")
inFile = "sample.txt"
outPath = file.path("D:","R_Analysis")
outFile = "processed_sample.txt"
pdfOutPath = file.path("D:","R_Analysis")
pdfOutFile = "processed_sample.pdf"

然后使用

read.table(file.path(inPath, inFile))
pdf(file.path(pdfOutPath, pdfOutFile))

你的路径是“windows-depended”(对磁盘标签的引用),但是如果你使用亲戚路径那么它可能会更有用。

第二个提示 - 你应该尽可能晚地打开图形设备,例如

pdf(file.path(pdfOutPath, pdfOutFile),height=6,width=9)
print(p + composite)  
dev.off()

当你想在窗口而不是文件中看到情节时,搜索正确的线条会更容易。

答案 1 :(得分:1)

与您的风格保持一致。例如,始终使用<-,或始终使用=;不要混搭。以下是GoogleHadley Wickham的一些示例样式指南。

如果您将read.tablesep=','header=TRUE一起使用,则可以改为拨打read.csv

尽可能尝试将内容放在函数中而不是使用一个长脚本。这可以帮助使代码更具可读性,作为奖励,您最终可能会重复使用一些代码,以便以后进行分析。在这种情况下,我很想将创建绘图的所有代码移动到一个函数中(可能使用子函数初始化绘图和绘制零件)。

R Inferno包含很多关于良好R编程实践的想法。