twinx x-ticklabels 在输入到 latex 文档时无法正确显示

twinx x-ticklabels 在输入到 latex 文档时无法正确显示

我有一个包含两个数据集的图,使用相同的 x 轴数据,因此我想使用 python 的 matplotlib 中的 twinx 功能来绘制它。为了在使用该图的 latex 文档中排版生成的图,我使用 tikzplotlib 将创建的图保存到 tex 文件中。我在 Spyder 5.0.0 中工作,使用的是 python 3.8,它向我展示了该图以及由 matplotlib 生成的图。

以下最小示例重现了我遇到的问题:

import numpy as np
import matplotlib.pyplot as plt
import tikzplotlib

# crete some data
x = np.arange (0, 4, 0.01)
y1 = x**2
y2 = 2**x-5

# create plot
fig, ax1 = plt.subplots()

color = 'tab:red'

ax1.set_xticks([0.5,1.5,2.5,3.5])
ax1.set_xticklabels(['-0.5-', '-1.5-', '-2.5-', '-3.5-'])

ax1.plot(x, y1, color=color)
ax1.tick_params(axis='y', labelcolor=color)

ax2 = ax1.twinx()  # instantiate a second axes that shares the same x-axis

color = 'tab:blue'
ax2.plot(x, y2, color=color)
ax2.tick_params(axis='y', labelcolor=color)


tikzplotlib.save("Tikz-twinx.tex", encoding='utf-8')

然后在我的乳胶文档中我使用以下命令输入图表:

\begin{figure}
    \input{Tikz-twinx.tex}
\end{figure}

该图在python中正确生成:

该图在 python 中正确生成

但是在用乳胶代码创建的pdf中它看起来像这样:

在此处输入图片描述

自动 x 刻度和手动添加的 x 刻度不知怎么地都出现了。删除它们的一种方法是在 Python 代码中为第二个 x 轴设置相同的 x 刻度。

ax2.set_xticklabels(['-0.5-', '-1.5-', '-2.5-', '-3.5-'])

但是,底部轴会变得更粗,好像被绘制了两次,我想避免这种情况。有人遇到过这个问题吗?如果是的话:有没有一种简单的解决方法(不需要每次手动调整 Tikz-twinx.tex 文件)来解决这个问题?

(此外,在乳胶 pdf 中出现的右侧 y 轴顶部有一个箭头,我还没有尝试删除它,但如果有人碰巧知道是什么原因造成的,我也会很感激。)

编辑 1:按照要求,由 tikzplotlib 生成的绘图的 tex 代码(我已经取出了大部分要绘制的数据,因为这些数据只占用了这里的空间):

% This file was created by tikzplotlib v0.9.8.
\begin{tikzpicture}

\definecolor{color0}{rgb}{0.83921568627451,0.152941176470588,0.156862745098039}
\definecolor{color1}{rgb}{0.12156862745098,0.466666666666667,0.705882352941177}

\begin{axis}[
tick align=outside,
tick pos=left,
x grid style={white!69.0196078431373!black},
xmin=-0.1995, xmax=4.1895,
xtick style={color=black},
xtick={0.5,1.5,2.5,3.5},
xticklabels={-0.5-,-1.5-,-2.5-,-3.5-},
y grid style={white!69.0196078431373!black},
ymin=-0.796005, ymax=16.716105,
ytick style={color=black}
]
\addplot [semithick, color0]
table {%
0 0
%etc.: data for the plot. Taken out for here, so it doesn't take up too much space
3.99 15.9201
};
\end{axis}

\begin{axis}[
axis y line=right,
tick align=outside,
x grid style={white!69.0196078431373!black},
xmin=-0.1995, xmax=4.1895,
xtick pos=left,
xtick style={color=black},
y grid style={white!69.0196078431373!black},
ymin=-4.74447399634963, ymax=11.6339539233422,
ytick pos=right,
ytick style={color=black},
yticklabel style={anchor=west}
]
\addplot [semithick, color1]
table {%
0 -4
%etc.: data for the plot. Taken out for here, so it doesn't take up too much space
3.99 10.8894799269926
};
\end{axis}

\end{tikzpicture}

答案1

我想一个选项可能是在第二个轴上添加空的刻度标签,至少标签不会被打印两次:

ax2.set_xticklabels([' ']*4) 

对于箭头,尝试

tikzplotlib.save("Tikz-twinx.tex", encoding='utf-8', extra_axis_parameters=['y axis line style={-}']) 

相关内容