如何使用 PGF 后端在 Latex 中合并和缩放 matplotlib 图?

如何使用 PGF 后端在 Latex 中合并和缩放 matplotlib 图?

我正在使用 matplotlib 的 pgf 后端来生成 pgf 文件,我想使用 tikzscale 将其放入我的 latex 文档中,以便能够轻松调整它们的大小。

示例 Python 代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import matplotlib as mpl
mpl.use('pgf')
import numpy as np
import matplotlib.pyplot as mplp

mpl.rcParams['text.latex.unicode']=True
mpl.rcParams['text.usetex']=True
mpl.rcParams['pgf.texsystem'] = 'pdflatex'

fig = mplp.figure()
ax = fig.add_subplot(111)

x = np.arange(0,2 * np.pi, .1)
data = np.sin(x)

fmt = {"lw" : 3, "c" : "r", "ls" : '-'}

ax.plot(x, data, label=r"sample data with greek $\mu$", **fmt)

ax.set_ylabel(r"sample", rotation=0)
ax.legend()
fig.set_size_inches(1.41,1.)
# fig.savefig('./sample.pgf', dpi=500, bbox_inches='tight')
fig.savefig('./sample.pgf', dpi=500)

乳胶代码示例:

\documentclass{article}

\usepackage[utf8]{inputenc}

\usepackage{tikz}
\usepackage{tikzscale}
\usepackage{pgfplots}

\pgfplotsset{compat=1.8}

\newcommand{\includepgf}[4]
{
  \begin{figure}
  \centering
  \includegraphics{#1}
  \includegraphics[width=#2\textwidth, height=#2*0.7071428571428572\textwidth]{#1}
  \includegraphics[width=#2\textwidth, axisratio=0.7071428571428572]{#1}
  \caption[]{#4}
  \label{#3}
  \end{figure}
}

\begin{document}
\includepgf{sample.pgf}{.9}{fig:sample}{Sample Figure}    
\end{document}

\includegraphics不幸的是,对于这三个不同的命令,发生了以下情况:

  1. 效果符合预期,包含原始大小的情节

  2. 编译时使用

     Package tikzscale Warning: Scaling of sample.pgf's width was only
     (tikzscale)                accurate to 208.59694pt on input line 27.
    
    
     Package tikzscale Warning: Scaling of sample.pgf's height was only
     (tikzscale)                accurate to 147.29488pt on input line 27.
    

    最终的 pdf 文件大小无需调整。

  3. 无法编译,给出

     ! Package tikzscale Error: Requested to scale unscalable graphic.
    

答案1

在此处输入图片描述

我不认为includegraphics这是自然的解决方案,因为你正在创建一个可用的 LaTeX 文件。正如 @Torbjørn T. 已经提到的,你应该使用命令input。然后,为了解决你的缩放问题,你可以使用

\scalebox{1.5}{\input{sample.pgf}}

例如;没有涉及初步的 LaTeX 编译。

  • 如果您想使用includegraphics,很自然地将您的图像保存为png中的一个文件python
  • 查看代码的输出python,即pgf文件,我发现存在一些裁剪问题。

代码

\documentclass{article}
\usepackage{tikz}
\usepackage{tikzscale}
\usepackage{pgfplots}

\usepackage{lipsum}
\begin{document}
\lipsum[1]

\begin{figure}[htb!]
  \centering
  \scalebox{.5}{\input{sample.pgf}}
  \scalebox{1}{\input{sample.pgf}}
  \scalebox{1.5}{\input{sample.pgf}}
  \caption{Sample figure modified with scalebox}
  \label{fig:1}
\end{figure}

\lipsum[2]
\end{document}

相关内容