如何将通过 R.NET 生成的图保存到磁盘上的文件中?
How to save a plot generated via R.NET to a file on disk?
我正在使用 R.NET 生成图表(使用 ggplot
),我想将这些图表以 PNG 格式保存在磁盘上。每当我调用 engine.Evaluate("ggsave('C:\path\to\file.png', myPlot)")
时,程序会突然中止,退出代码为 2,而不会向磁盘写入任何内容;发生这种情况时不会显示错误。也不可能使用 png()
或 pdf()
将绘图写入文件。这个问题不是 ggplot
特有的,但是 - 我也无法存储通过本机 plot
函数生成的图。
我可以将问题缩小到包含 ggsave()
或 png()
/pdf()
的行:执行此行时,程序中止。由于我实际上可以看到 ggplot()
和 plot()
生成的图,因此绘图本身似乎不是问题。
您应该能够使用以下 C# 代码重新创建我所描述的内容:
using RDotNet;
namespace Test {
class Program {
static void Main(string[] args) {
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
engine.Evaluate("png('D:\Test.png')");
engine.Evaluate("plot(rnorm(1000))");
engine.Evaluate("dev.off()");
}
}
}
Apparently, this code should work without any issues.
当运行
png('D:\Test.png')
plot(rnorm(1000))
dev.off()
在 R 中,生成绘图并成功保存到 Test.png。
我正在使用 .NET Framework 4.6.1、R.NET 1.7.0 和 R 3.4.2。我的计算机上没有安装 R,也没有为 R 创建注册表项 - 我只是按照 here.
所述使用 R DLL
事实证明,图像文件路径中不能有反斜杠。如果要将图像写入磁盘上的文件,则必须使用正斜杠,例如而不是
engine.Evaluate("png('D:\Test.png')");
使用
engine.Evaluate("png('D:/Test.png')");
也许这对其他人仍然有帮助。
这并不是说您在回答中提到的不能使用反斜杠。虽然正斜杠也可以解决您的问题,但我认为如果我解释其他解决方案,将来可能会有所帮助。
你必须转义你的反斜杠两次。
一次用于 C#,一次用于 R。
像这样调用Evaluate
engine.Evaluate("png('D:\Test.png')");
将使用字符串调用 R
引擎:"png('D:\Test.png')"
,如果您对其求值,则它只是:png('D:\Test.png').如果你在 R 中输入它,你也会得到一个错误。
如果你想运行 R 命令png('D:\Test.png')
,你必须转义那个字符串,它在转义后有两个反斜杠[=28] =]变成:"png('D:\\Test.png')"
.
我正在使用 R.NET 生成图表(使用 ggplot
),我想将这些图表以 PNG 格式保存在磁盘上。每当我调用 engine.Evaluate("ggsave('C:\path\to\file.png', myPlot)")
时,程序会突然中止,退出代码为 2,而不会向磁盘写入任何内容;发生这种情况时不会显示错误。也不可能使用 png()
或 pdf()
将绘图写入文件。这个问题不是 ggplot
特有的,但是 - 我也无法存储通过本机 plot
函数生成的图。
我可以将问题缩小到包含 ggsave()
或 png()
/pdf()
的行:执行此行时,程序中止。由于我实际上可以看到 ggplot()
和 plot()
生成的图,因此绘图本身似乎不是问题。
您应该能够使用以下 C# 代码重新创建我所描述的内容:
using RDotNet;
namespace Test {
class Program {
static void Main(string[] args) {
REngine.SetEnvironmentVariables();
REngine engine = REngine.GetInstance();
engine.Evaluate("png('D:\Test.png')");
engine.Evaluate("plot(rnorm(1000))");
engine.Evaluate("dev.off()");
}
}
}
Apparently, this code should work without any issues.
当运行
png('D:\Test.png')
plot(rnorm(1000))
dev.off()
在 R 中,生成绘图并成功保存到 Test.png。
我正在使用 .NET Framework 4.6.1、R.NET 1.7.0 和 R 3.4.2。我的计算机上没有安装 R,也没有为 R 创建注册表项 - 我只是按照 here.
所述使用 R DLL事实证明,图像文件路径中不能有反斜杠。如果要将图像写入磁盘上的文件,则必须使用正斜杠,例如而不是
engine.Evaluate("png('D:\Test.png')");
使用
engine.Evaluate("png('D:/Test.png')");
也许这对其他人仍然有帮助。
这并不是说您在回答中提到的不能使用反斜杠。虽然正斜杠也可以解决您的问题,但我认为如果我解释其他解决方案,将来可能会有所帮助。
你必须转义你的反斜杠两次。
一次用于 C#,一次用于 R。
像这样调用Evaluate
engine.Evaluate("png('D:\Test.png')");
将使用字符串调用 R
引擎:"png('D:\Test.png')"
,如果您对其求值,则它只是:png('D:\Test.png').如果你在 R 中输入它,你也会得到一个错误。
如果你想运行 R 命令png('D:\Test.png')
,你必须转义那个字符串,它在转义后有两个反斜杠[=28] =]变成:"png('D:\\Test.png')"
.