我需要在一个文件中绘制一些数据(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 节点和路径。使用指定的坐标参考图像坐标系:height
axis
(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}