9

我有一个 bash 脚本,可以在运行命令时跟踪内存使用情况。它产生所需的命令,然后用 column1 = "memory in use by program (gigs)" 写入日志,第 2 列是到目前为止已用的时间(以秒为单位)。例如

31.282 1470
31.565 1480
31.848 1490
31.989 1500
32.273 1510
32.414 1520
32.697 1530
32.980 1540
33.122 1550
33.405 1560
6.511 1570
6.935 1580
7.502 1590
7.926 1600
8.351 1610
8.775 1620
9.059 1630
9.483 1640
9.908 1650
10.333 1660

我想要做的是等到该过程完成,然后使用 R 绘制随时间变化的内存使用图并将其保存在当前目录中。我在玩 R,我确切地知道我需要使用哪些命令:

> heisenberg <- read.csv(file="4644.log",head=FALSE,sep=" ")
> plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="Memory Usage Over Time",xlab="Time (seconds)",ylab="Memory (gigabytes)")
> text(max(heisenberg$V2),max(heisenberg$V1),max(heisenberg$V1)) #Displays max value

但我坚持的部分是将图形保存为 jpg 或 png。或者我如何在我的 bash 脚本中执行这个命令。我绝对需要用 R 语言编写另一个脚本并运行它吗?这有可能一举两得吗?


编辑

这是我的 script.r 的代码

png("mem_usage_2965.png",height=800,width=800)
heisenberg <- read.csv(file="2965.log",head=FALSE,sep=" ")
plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="oases_k85",xlab="Time (seconds)",ylab="Memory (gigabytes)")
text(max(heisenberg),max(heisenberg),max(heisenberg))
dev.off()

谁能帮助解释为什么文本没有在输出的 png 中打印最大值?我在 bash 脚本中调用它R CMD BATCH script.r script.out

4

2 回答 2

13

将您的绘图调用包含在:

jpeg("myplot.jpg")
....plot code here....
dev.off()

或者

png("myplot.png")
....plot code here....
dev.off()

请参阅他们各自的帮助页面:?png有关其他参数的详细信息。

对于 PNG,这将是:

png("my_plot.png", height = 800, width = 600)
plot(heisenberg$V2,heisenberg$V1,type="o",col="red",main="Memory Usage Over Time",xlab="Time (seconds)",ylab="Memory (gigabytes)")
text(max(heisenberg$V2),max(heisenberg$V1),max(heisenberg$V1)) #Displays max value
dev.off()

至于在 bash 脚本中运行它,您需要调用 R 来运行包含 R 代码的脚本以加载数据并绘制绘图。为此,有多种选择,其中两种是:

R CMD BATCH --no-save --no-restore my_script.R

或使用Rscript

Rscript my_script.R

其中my_script.R是包含生成绘图所需的语法有效的 R 代码的文本文件。

于 2012-06-13T17:33:29.190 回答
2

你只看简单的吗? http://stat.ethz.ch/R-manual/R-devel/library/grDevices/html/png.html

你基本上告诉 R 开始保存 .png :

png(file="blah.png")

然后使用:

dev.off()

恢复正常。

于 2012-06-13T17:33:27.100 回答