web-dev-qa-db-ja.com

gnuplotのタイトルに下付き文字ではなくアンダースコアを表示する

簡単な質問: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に変更されることを除いて、これはgnuplotで正常に機能しますa紀元前。エスケープ文字をファイル名に含めたくないので、エスケープ文字を使用するかどうかはわかりません。一重引用符と二重引用符を使用していくつかの異なるオプションを試しましたが、必要なものがまだ見つかりません。

19

拡張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'文字列に一重引用符を使用していることに注意してください。詳細については、以前にリンクされた質問を参照してください。

16
andyras

ラベルを生成するほとんどの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のインデックスを見つけます。次に、文字列の連結とスライスを介してそのオカレンスを削除し、関数を再帰的に再度呼び出して、次のオカレンスを削除します。インデックスが見つからない場合(strstrtは0を返します)、入力された文字列を返すだけです。これで、次のことができます。

set output remove('\',item)
set title item
15
mgilson

の代わりに foo_abc、 書く foo\\\_abc

12
Morteza

アンダースコアは、タイトルを「拡張テキスト」として扱うことから得られます。を使用してそれをオフにします

強化されたキーの設定

6
Ethan

タイトルのアンダースコアについても同じ問題がありました。たとえば、4_3サブフレームを作成する必要があり、拡張されたポストスクリプトが必要でした。最も簡単な方法は、隣接する投稿からのものであることが判明しました。 `ʻ拡張epsターミナルを使用している場合は、そもそもアンダースコアをエスケープする必要があるのはそのためです。今日、この問題を少し説明する別の関連する質問がありました。 " @はgnuplotでどのように生成されますか? それで、私は彼らのアドバイスに従い、これはうまくいきました:

plot'LC.stats 'u 3:4 ti "{/ = 15 C18 4\_3サブフレームの1350スター}"-アンダースコアの前に二重エスケープ文字。

0
Margarita