我有一个包含两个数据集的图,使用相同的 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中正确生成:
但是在用乳胶代码创建的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={-}'])