绘制和保存R图表

9

我有一个bash脚本,可以在运行命令时跟踪内存使用情况。它会启动所需的命令,然后记录一个日志,其中第一列是“程序使用的内存(以GB为单位)”,第二列是已经过的时间(以秒为单位)。例如:

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


为什么你没有计算 heisenberg$V1heisenberg$V2max() 呢?目前你正在计算 heisenberg 数据框中 两个 坐标(x 和 y)的最大值,所以不奇怪它不会出现在图表上;它在图表之外。我认为你想要:with(heisenberg, text(max(V2), max(V1), max(V1))),至少这是你展示的原始代码片段所建议的。你知道新代码和原始代码不匹配吗? - Gavin Simpson
仔细看后,我现在确实意识到了区别。那是因为我只是打开了bash脚本输出的script.r文件,但我忘记转义$符号了。因此它们被解释为null变量。我会像你说的那样尝试使用with语句。明确一下,我想要的是在图表上显示最大值,并带有文本显示。 - E.Cross
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代码。


那么,在我的bash脚本中有没有办法做到这一点呢?可以在命令行中使用R吗? - E.Cross
有关R的脚本接口详细信息,请参见?RScript。还有其他方法,例如使用R CMD BATCH。但这是另一个问题,所以您应该在那个主题上提出另一个问题。 - Gavin Simpson
@LanceH 在bash脚本中是不行的,你需要调用R来运行R代码。例如,你可以将你的片段与RScript结合起来,以调用R并运行“.r”文件的内容。 - Gavin Simpson
R CMD BATCH 似乎是我正在寻找的东西。通过在我的 bash 脚本中使用回显,我可以输出一个 R 脚本。然后,我可能可以以某种方式调用这个脚本。 - E.Cross
Rscript 可能更适合。 - Gavin Simpson
显示剩余3条评论

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接