31

短い質問_: gnuplot の変数名から割り当てられた gnuplot のタイトルに (アンダースコア) 文字を表示するにはどうすればよいですか?

詳細: 次のコードのようなものがあります。

items = "foo_abc foo_bcd bar_def"
do for [item in items] {
  set title item
  set output item.eps
  plot item."-input.txt" using 1:2 title item with linespoints
}

タイトルが foo_abc から foo a bc に変更されることを除いて、これは gnuplot で問題なく動作します。ファイル名にエスケープ文字を含めたくないので、エスケープ文字を使用するかどうかわかりません。一重引用符と二重引用符を使用していくつかの異なるオプションを試しましたが、必要なものがまだ見つかりません。

4

5 に答える 5

22

ラベルを生成するほとんどの gnuplot コマンドnoenhancedは、gnuplot がその文字列だけに拡張テキストを使用するのを防ぐキーワードを受け入れます。この場合、次のようにするだけで十分です。

set title item noenhanced

別の方法として、不要なテキストを に渡すときに文字列から不要なテキストを削除する関数を作成することもできますset output

remove(x,s)=(i0=strstrt(s,x),i0 ? remove(x,s[:i0-1].s[i0+strlen(x):]):s)
# Makes me wish gnuplot syntax was more pythonic :-p
#TODO:  Write a `replace` function :-).  These just might go into my ".gnuplot" file...

インライン関数を使用してx、文字列内でが最初に出現するインデックスを見つけますs。次に、文字列の連結とスライスによってその出現を削除し、関数を再帰的に呼び出して次の出現を削除します。インデックスが見つからない ( strstrt0 を返す) 場合は、入力された文字列を返します。これで、次のことができます。

set output remove('\',item)
set title item
于 2012-12-01T02:44:01.423 に答える
17

強化された eps ターミナルを使用している場合、最初にアンダースコアをエスケープする必要があるのはそのためです。今日、この問題を少し説明する別の関連する質問がありました。端末を設定するときは、次を試してください。

set terminal postscript noenhanced <whatever else here...>

それは私にとってはうまくいきます(Arch Linux、gnuplot 4.7.0)。拡張端末が不可欠な場合、以下は私が見つけた部分的な解決策です。アンダースコアは常に文字列内の同じ場所にあると想定されています。

set terminal postscript enhanced
items = 'foo\_abc foo\_bcd bar\_def'
do for [item in items] {
  set output item[1:3].item[5:*].'.eps'
  set title item
  plot sin(x)
}

このようにして、アンダースコアをエスケープし、ファイル名に \ が表示されないようにすることができます。「items」文字列に一重引用符を使用していることに注意してください。詳細については、以前にリンクされた質問を参照してください。

于 2012-12-01T01:08:47.340 に答える
0

タイトルのアンダースコアについても同じ問題がありました。たとえば、4_3 サブフレームを記述する必要があり、強化されたポストスクリプトが必要でした。最も簡単な方法は、次の投稿からのものであることが判明しました。今日、この問題を少し説明する別の関連する質問がありました." - @ は gnuplot でどのように生成されますか? そこで、彼らのアドバイスに従い、これがうまくいきました:

plot 'LC.stats' u 3:4 ti "{/=15 1350 stars in C18 4\_3 subframe}" - アンダースコアの前にダブル エスケープ文字。

于 2015-09-30T08:01:46.257 に答える