ticklabel 中的字体问题,带有 pandas 条形图和乳胶的 pgf 输出

问题描述 投票:0回答:1

使用 python (3.12.4) 使用此代码为条形图生成 pgf 输出

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.rc('font',**{'family':'serif','serif':['Palatino'], 'size': 20})
plt.rc('text', usetex=True)
fig, ax = plt.subplots()


df = pd.DataFrame({'a':[1,3,4,2], 'b':[1,2,3,4]})
df.plot.bar(x='a', y='b', ax=ax)
plt.xticks(rotation=0)

plt.savefig(f'out.pgf',bbox_inches='tight')

并用 pdflatex 编译它(pdflatex --version pdfTeX 3.141592653-2.6-1.40.26)

\documentclass{standalone}
\usepackage{palatino}
\usepackage{tikz}
\usepackage{amsmath}
\def\mathdefault#1{#1}
\begin{document}
\input{out.pgf}
\end{document}

在 x 和 y 刻度标签上产生不同的字体类型:

剧情

我希望有相同的字体类型。这是一个错误,还是有解决方法?

pandas matplotlib latex bar-chart pgf
1个回答
0
投票

好的,手动将

\mathdefault{}
引入到 x 轴上的每个标签至少会产生所需的输出。

甚至可能存在比这更难读的退出代码片段(甚至可能没有):

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.rc('font',**{'family':'serif','serif':['Palatino'], 'size': 20})
plt.rc('text', usetex=True)
fig, ax = plt.subplots()


df = pd.DataFrame({'a':[1,3,4,2], 'b':[1,2,3,4]})
df.plot.bar(x='a', y='b', ax=ax)
plt.xticks(rotation=0)

labels=ax.get_xticklabels()
for i,_ in enumerate(labels):
    labels[i].set_text(f'$\\mathdefault{{{labels[i].get_text()}}}$')
ax.set_xticklabels(labels)


plt.savefig(f'out.pgf',bbox_inches='tight')
© www.soinside.com 2019 - 2024. All rights reserved.