带轴的图像

带轴的图像

我需要在一个文件中绘制一些数据(10000 条记录,每条记录 2 个点),但PGFPlots渲染速度非常非常慢。因此,我尝试使用 MatLab 绘制数据,捕获图像没有轴并tikzpicture用轴渲染图像。

以下是我用 96 x 96 PNG 图像进行的测试:

在此处输入图片描述

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
  \pgfdeclareimage[width=5cm]{fondo}{avatarMSM.png}
  \begin{tikzpicture}
    \draw node[anchor=south west] (nodoFondo) at (axis cs:0,0) {\pgfuseimage{fondo}};
    \begin{axis}[
        width=5cm,
        scale only axis,
        enlargelimits=false,
        xmin=0,
        xmax=96,
        ymin=0,
        ymax=96,
        axis equal=true
        ]

      \addplot[thick,blue] (0,0) -- (axis cs:96,96);
    \end{axis}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

结果是图像周围有白色边缘,并且无法适合轴。

答案1

由于您使用 pgfplots 来生成轴,因此您可以使用其内置方法\addplot graphics将轴对齐到图形顶部。

您需要做的是定义轴的左下角和右上角——如果您的图像具有紧密的边界框,那就足够了。如果没有紧密的边界框,您可能需要查阅 pgfplots 手册部分“使用外部图形作为绘图源”以获取更多信息。

结果如下:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
        axis on top,% ----
        width=5cm,
        scale only axis,
        enlargelimits=false,
        xmin=0,
        xmax=96,
        ymin=0,
        ymax=96,
        axis equal=true
        ]

      \addplot[thick,blue] graphics[xmin=0,ymin=0,xmax=96,ymax=96] {Dad64.png};
    \end{axis}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

通过此设置,您可以重新缩放轴 - 并且命令\addplot graphics将自动重新缩放图形以适合指定的坐标之间。

该功能还支持 3d 图形 + 3d 轴(但需要您提供更多的输入)。


要使轴自动调整大小以适应图片,同时尊重图像的纵横比,您应该设置axis equal image。为指定或width将缩放轴和图像。除了绘制轴之外,您还可以使用此设置使用图像坐标系放置其他 TikZ 节点和路径。使用指定的坐标参考图像坐标系:heightaxis(axis cs:<x>,<y>)

\documentclass{article}
\usepackage{pgfplots}


\begin{document}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false, axis on top, axis equal image]
\addplot graphics [xmin=0,xmax=96,ymin=0,ymax=96] {Dad64};
\node at (axis cs:49,30) [
    circle,
    draw,
    red,
    thick,
    minimum size=3ex,
    pin={[pin edge=thick]-10:Nose}
] {};
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[enlargelimits=false, axis on top, axis equal image, width=6cm]
\addplot graphics [xmin=0,xmax=96,ymin=0,ymax=96] {Dad64};
\end{axis}
\end{tikzpicture}
\end{document}

答案2

见第 4.2.8 节使用外部图形作为绘图源在 PGFplots 手册中。

\documentclass{article}
\usepackage{pgfplots}
\begin{document}
  \begin{tikzpicture}
    \begin{axis}[
        width=5cm,
        scale only axis,
        enlargelimits=false,
        axis on top]
      \addplot graphics[xmin=0,xmax=96,ymin=0,ymax=96] {Dad64};
    \end{axis}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

这确实存在图像没有正确纵横比的问题(见评论)。一个不太理想的解决方法是同时指定图的高度,IE,将height=<length>其作为选项添加到axis。对于二次图像来说,这很容易,但对于非二次图像来说,这有点不方便,因为必须根据图像尺寸计算高度。

答案3

另一种方法如下。此演示还展示了如何自定义轴和样式。

  • 使用 pgfplots 创建空轴
  • \node使用插入图像rel axis cs

以下是工作代码。你可以从这里获取工作示例此文件夹

\documentclass[crop]{standalone}
%\usepackage[a4paper,landscape]{geometry}
\usepackage{tikz}
\usepackage{pgfplots}
\usepgfplotslibrary{polar}
\usetikzlibrary{positioning}
\begin{document}

\begin{tabular}{c c}
    Bear & Polar Bear \\
\begin{tikzpicture}[ ]
\begin{axis}[
        grid = both
        , minor tick num=5
        , grid style={draw=gray!10,line width=.1pt}
        , major grid style={line width=0.5pt,draw=gray!50}
        , axis line style={latex-latex}
        , xticklabels = \empty
        , yticklabels = \empty
        , draw=blue!20
    ]

        \addplot[draw=none] coordinates {(2,2)};
        \node[] (image) at (rel axis cs:0.5,0.5) {\includegraphics[width=5cm]{./bear.png}};
    \end{axis}
\end{tikzpicture} &
\begin{tikzpicture}[]
    ]
    \begin{polaraxis}[
        grid = both
        , minor tick num=5
        , grid style={draw=gray!10,line width=.1pt}
        , major grid style={line width=0.5pt,draw=gray!50}
        , axis line style={latex-latex}
        , xticklabels = \empty
        , yticklabels = \empty
        , draw=blue!20
    ]
        \addplot[draw=none] coordinates {(1,1)};
        \node[] at (rel axis cs:0,0) {\includegraphics[width=5cm]{./bear.png}};
    \end{polaraxis}
\end{tikzpicture}%
\end{tabular}

\end{document}

最终产品如下(用于演示)

在此处输入图片描述

答案4

为了 PSTricks 的完整性。

\documentclass[pstricks,border=24pt,12pt]{standalone}
\usepackage{pst-plot}
\usepackage{graphicx}

\newsavebox\IBox
\savebox\IBox{\includegraphics[scale=1]{example-image-a}}

\def\Rows{5}
\def\Columns{5}

\psset
{
    xunit=\dimexpr\wd\IBox/\Columns,
    yunit=\dimexpr\ht\IBox/\Rows,
}

\begin{document}
\begin{pspicture}(\Columns,\Rows)
    \rput[bl](0,0){\usebox\IBox}
    \psaxes[axesstyle=frame,tickstyle=inner,ticksize=0 5pt](\Columns,\Rows)
    \psellipse[linecolor=red,linestyle=dashed,linewidth=5pt](2.5,2.5)(2,2)
\end{pspicture}
\end{document}

在此处输入图片描述

相关内容