我在 matplotlib 中有一个图像,我想使用 Latex 语法在标题中放置一个比例尺。使用\vdash
和\dashv
命令,我可以得到比例尺的末端,如图所示,但我希望中间的线条看起来更好。最好我想要一些看起来像平头 tikz 箭头的东西,其中长度可以任意选择,示例包含在图中。
是否可以在 matplotlib 标题中包含 tikz 箭头?
是否有其他可用的命令,不需要额外的包来产生与 tikz 箭头类似的字符?
我的代码用于生成图中的标题。
import matplotlib.pyplot as plt
import matplotlib
# Setup Latex params
preamble = '\n'.join([r"\usepackage{lmodern}", r"\usepackage{tikz}"])
params = {'text.latex.preamble': preamble,
'text.usetex': True,
'font.size': 8,
'font.family': 'lmodern'}
matplotlib.rcParams.update(params)
# Create figure
fig, axes = plt.subplots(2, 2)
axes = axes.flatten()
fig.set_size_inches(3.49, 3.49)
# random data for plotting
X = [1, 8, 4, 6, 2]
Y = [1, 2, 3, 4, 5]
titles = ["%i mm" % (i*3) for i in range(5)]
# Plot, set title, and remove axis numbering
for ax, t in zip(axes, titles):
ax.set_xticks([])
ax.set_yticks([])
ax.scatter(X, Y)
ax.set_title(r"$\vdash \quad 800 \mu{}m \quad \dashv$")
# ax.set_title(r"\tikz\draw[|-](0,0)--(1,0);")
plt.show()
创建 tikz 箭头的示例取自https://latexdraw.com/exploring-tikz-arrows/。
\documentclass[border=0.2cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [-|](0,0) -- (1,0);
\draw [|-](0,-1) -- (1,-1);
\end{tikzpicture}
\end{document}
需要指出的是,我在绘图时使用了以下 rcParams:
params = {'text.latex.preamble': r"\usepackage{lmodern}",
'text.usetex': True,
'font.size': 8,
'font.family': 'lmodern'}
matplotlib.rcParams.update(params)
答案1
我不知道如何使用默认matplotlib
绘图引擎实现这一点,但如果你改变后端,pgf
效果会很好(在我自己的作品中,我总是使用pgf
后端;但这个答案中的间距是不正确的,因为我不想调整 Ti钾Z 箭头长度):
import matplotlib.pyplot as plt
import matplotlib as mpl
# Setup Latex params
preamble = '\n'.join([r"\usepackage[T1]{fontenc}",
r"\usepackage{lmodern}",
r"\usepackage{tikz}",
r"\usepackage[detect-all]{siunitx}"])
params = {'pgf.preamble': preamble,
'font.size': 8,
'font.family': 'serif'}
mpl.use('pgf')
mpl.rcParams.update(params)
# Create figure
fig, axes = plt.subplots(2, 2)
axes = axes.flatten()
fig.set_size_inches(3.49, 3.49)
# random data for plotting
X = [1, 8, 4, 6, 2]
Y = [1, 2, 3, 4, 5]
titles = ["%i mm" % (i*3) for i in range(5)]
# Plot, set title, and remove axis numbering
for ax, t in zip(axes, titles):
ax.set_xticks([])
ax.set_yticks([])
ax.scatter(X, Y)
# ax.set_title(r"$\vdash \quad 800 \mu{}m \quad \dashv$")
ax.set_title(r"\tikz\draw[|-](0,0)--(1,0);"
r"\SI{800}{\micro\metre}"
r"\tikz\draw[-|](0,0)--(1,0);")
# plt.show()
plt.savefig("matplotlibthingy.pdf")