2016-07-06 9 views
4

私は図を生成するためにpythonスクリプトを使うのが好きです。この図には、タイトルの一部としてスクリプトファイル名(フルパスで)が含まれていなければなりません。たとえば:Jupyterから正しく表示されたプロットのタイトルとしてpythonスクリプトファイル名を取得するにはどうすればよいですか?

import numpy as np 
import matplotlib.pyplot as plt 

plt.rcParams['text.usetex'] = True 

x = np.linspace(0, 10, 10) 
titleString = __file__.replace('_', '\_') 

plt.plot(x, x) 
plt.title(titleString) 
plt.show() 

は、スパイダーでIPythonコンソールが正しくタイトルを示しています。私はJupyterノート4.2.1でアナコンダを使用して、Windows 7で(スクリプトを実行する場合は、しかし、

enter image description here

をし、私は次のような結果を得る

%matplotlib inline 
%run 'H:/Python/Playground/a_test' 

経由Jupyterノートブック内からスパイダー2.3.9):

enter image description here

スクリプトのパスとファイル名が正しくないことに注意してください。これを修正する方法はありますか?

+0

Mac OSXの2番目の例のように実行すると、タイトルにはpathを含むファイル名全体が含まれます。これらのコマンドは全く同じ出力を生成します: '%run file'と'%run/path/file' – fabianegli

+0

@fabianegli Ok。私はこれをWindowsマシン上で実行していると言わざるを得ない。 – DaPhil

+0

質問のパスがすでにわかっているので、私はOSを追加しました:-) – fabianegli

答えて

2

私はチェックするWindowsマシンはありませんが、LaTeXのすべての特殊文字https://stackoverflow.com/a/25875504/6018688をエスケープしてこの小さな迂回路が動作する可能性があります。 rcParams['text.usetex']rcParams['text.latex.unicode']の使用にも注意してください。

import numpy as np 
import matplotlib.pyplot as plt 

import re 

def tex_escape(text): 
    """ 
     :param text: a plain text message 
     :return: the message escaped to appear correctly in LaTeX 
    """ 
    conv = { 
     '&': r'\&', 
     '%': r'\%', 
     '$': r'\$', 
     '#': r'\#', 
     '_': r'\_', 
     '{': r'\{', 
     '}': r'\}', 
     '~': r'\textasciitilde{}', 
     '^': r'\^{}', 
     '\\': r'\textbackslash{}', 
     '<': r'\textless', 
     '>': r'\textgreater', 
    } 
    regex = re.compile('|'.join(re.escape(str(key)) for key in sorted(conv.keys(), key = lambda item: - len(item)))) 
    return regex.sub(lambda match: conv[match.group()], text) 


import matplotlib.pyplot as plt 

plt.rcParams['text.usetex'] = True 
plt.rcParams['text.latex.unicode'] = True 

x = np.linspace(0, 10, 10) 
titleString = tex_escape(__file__) 

plt.plot(x, x) 
plt.title(titleString) 
plt.show() 
関連する問題