5

でいくつかのプロットを作成するために、swift から gunplot を呼び出そうとしています.png。ただし、以下のプログラムは機能しません --- 結果の1.pngファイルは空です。ただし、「set term aqua」をそのままにしておくと、プロットを含む aqua ウィンドウが呼び出されます。ただし、出力をファイル (png または pdf) に設定しようとすると、結果は常に空のファイルになります。

gnuplot コマンドは問題ありません --- 手動で正しく実行できます。

import Foundation

let task = NSTask()
task.launchPath = "/opt/local/bin/gnuplot"
task.currentDirectoryPath = "~"

let pipeIn = NSPipe()
task.standardInput = pipeIn
task.launch()

let plotCommand: NSString =
  "set term png\n" +
  "set output \"1.png\"\n"
  "plot sin(x)\n" +
  "q\n"

pipeIn.fileHandleForWriting.writeData(plotCommand.dataUsingEncoding(NSUTF8StringEncoding)!)

私はswiftとpipesの両方に慣れていないので、コードに何か問題があるか、推奨されていないか教えてください。

4

2 に答える 2

4

文字列を連結するとき、単純な記号を見落としがちです。
この場合、次の行に\nとを追加して修正できます。+set output

 "set output \"1.png\"\n" +

アイデアは、gnuplotシェルで書いているかのように文字列を作成することです。そのため、それぞれ\nで新しい行をシミュレートし、それぞれ+で2つ以上の文字列を連結しています...これは、 gnuplotスクリプト
の根底にあるアイデアです...

多くの場合gnuplot、外部スクリプトを作成してロードするのは快適です

  load "myscript.gnuplot"

またはそれを実行する

 gnuplot -persist myscript.gnuplot

このようにして、プロットや分析を瞬く間にやり直す可能性が常にあり、結果は常に再現可能になります。

于 2015-03-17T17:50:38.910 に答える