为pandas绘图功能制作tex兼容的名称

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为pandas绘图功能制作tex兼容的名称相关的知识,希望对你有一定的参考价值。

假设我绝对需要使用tex来生成我的数字文本,并且我使用以下代码:

#!/usr/bin/env python3

import matplotlib as mpl
mpl.use("PDF")
from matplotlib.backends.backend_pgf import FigureCanvasPgf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np


# https://stackoverflow.com/a/42768093/1878788
mpl.backend_bases.register_backend('pdf', FigureCanvasPgf)
TEX_PARAMS = {
    "text.usetex": True,            # use LaTeX to write all text
    "pgf.rcfonts": False,           # Ignore Matplotlibrc
    "pgf.texsystem": "lualatex",  # hoping to avoid memory issues
}
mpl.rcParams.update(TEX_PARAMS)


def main():
    data = pd.DataFrame({
        "A1": np.random.randn(4),
        "B1": np.random.randn(4),
        "A2": np.random.randn(4),
        "B2": np.random.randn(4)})
    data.plot.box()
    plt.savefig("test_tex_boxplot.pdf")


if __name__ == "__main__":
    exit(main())

这有效。

现在,如果我的DataFrame中的列名包含下划线(A_1而不是A1),则tex失败:

RuntimeError: LaTeX was not able to process the following string:
b'A_1'

我怎样才能解决这个问题?

答案

一种解决方案是在调用绘图函数之前通过转义下划线来更改列名:

#!/usr/bin/env python3

import matplotlib as mpl
mpl.use("PDF")
from matplotlib.backends.backend_pgf import FigureCanvasPgf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from re import sub


# https://stackoverflow.com/a/42768093/1878788
mpl.backend_bases.register_backend('pdf', FigureCanvasPgf)
TEX_PARAMS = {
    "text.usetex": True,            # use LaTeX to write all text
    "pgf.rcfonts": False,           # Ignore Matplotlibrc
    "pgf.texsystem": "lualatex",  # hoping to avoid memory issues
}
mpl.rcParams.update(TEX_PARAMS)


def main():
    data = pd.DataFrame({
        "A_1": np.random.randn(4),
        "B_1": np.random.randn(4),
        "A_2": np.random.randn(4),
        "B_2": np.random.randn(4)})
    usetex = mpl.rcParams.get("text.usetex", False)
    if usetex:
        data.columns = [sub("_", "\_", colname) for colname in data.columns]
    data.plot.box()
    plt.savefig("test_tex_boxplot.pdf")


if __name__ == "__main__":
    exit(main())

以上是关于为pandas绘图功能制作tex兼容的名称的主要内容,如果未能解决你的问题,请参考以下文章

将索引转换为名称 pandas 以进行绘图

移动椭圆的板绘图代码

TeX系列: tikz-3dplot绘图宏包

来自pandas dataframe python的barh图中行的不同颜色

pandas.DataFarme内置的绘图功能参数说明

数据可视化干货:使用pandas和seaborn制作炫酷图表(附代码)