matplotlib – 如何将一个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()

Spyder中的IPython控制台正确显示标题:

《matplotlib – 如何将一个python脚本文件名作为Jupyter正确显示的图表的标题?》

但是,如果我在Jupyter笔记本中运行脚本(在Windows 7上,使用Anaconda与Jupyter Notebook 4.2.1和Spyder 2.3.9)

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

我得到以下结果:

《matplotlib – 如何将一个python脚本文件名作为Jupyter正确显示的图表的标题?》

请注意,脚本路径和文件名不正确.有没有办法来解决这个问题?

最佳答案 我没有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()
点赞