如何将其他图形插入 Asymptote 或 pgfplots?以下是 pgfplots 中的 MWE,它在文档中创建了三个图形。我想要插入图形的主要图形是 pgfplot 图形,其他两个是矢量或光栅图形。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{graphicx}
\pgfplotsset{compat=newest}
\begin{document}
Figure 1 is the main figure that will be used for the insertion of a vector or a raster graphics.
\begin{figure}
\begin{tikzpicture}
\begin{axis}[
colormap={bw}{gray(0cm)=(0); gray(1cm)=(1)}]
\addplot+[scatter,only marks,
domain=0:8,samples=100]
{exp(x)};
\end{axis}
\end{tikzpicture}
\caption{This is the main figure.}
\end{figure}
Figure 2 is a graphics which I want to be inside figure 1, which is a vector graphics. I want to place it in the upper left corner position.
\begin{figure}
\begin{tikzpicture}
\begin{axis}[colormap/bluered]
\addplot+[scatter,
scatter src=x,samples=50]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}
\caption{This figure needs to be inside figure 1.}
\end{figure}
Figure 3 is another graphics which I want to be placed inside figure 1 in the upper left corner.
\begin{figure}
\includegraphics[width=\linewidth]{piv.jpg}
\caption{This figure needs to be inside figure 1}.
\end{figure}
\end{document}
这是图 1,它是一个 pgfplots 图形。
这是图 2,它是一个 pgfplots 图形。
这是图 3,它是一个 jpg 图像。
这是图 1 和图 2 的组合。图 2 位于图 1 的左上角。我希望这个图是矢量图形
这是图 1 和图 3 的组合。图 3 位于图 1 的左上角。我希望图 1 仍然是矢量图形。
如果有人能帮助我如何在 Asymptote 和 pgfplots 中插入其他矢量图形以及光栅图形,我将不胜感激。
答案1
对于pgfplots
其中,pgfplots
你可以在代码中合并两个图,如下图所示\groupplot 中的绘图如何水平和垂直移动?
对于图像,在axis
图 1 的环境中添加以下内容:
\node [above right] at (rel axis cs:0.2,0.4) {\includegraphics[width=2.5cm]{piv}};
指定图像左下角位置的精确坐标和宽度可能需要修改。rel axis cs
是一个坐标系,(0,0)
其左下角为axis
,(1,1)
右上角为 。
请注意,如果您将pgfplots
绘图作为矢量化的 PDF,则以这种方式包含它不会将其栅格化,因此您可以对两者使用此方法。
\documentclass{article}
\usepackage{pgfplots}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{graphicx}
\pgfplotsset{compat=newest}
\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
colormap={bw}{gray(0cm)=(0); gray(1cm)=(1)}]
\addplot+[scatter,only marks,
domain=0:8,samples=100]
{exp(x)};
\coordinate (otheraxis) at (rel axis cs:0.2,0.4);
\end{axis}
\begin{axis}[colormap/bluered,at={(otheraxis)},width=5cm]
\addplot+[scatter,
scatter src=x,samples=50]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}
\caption{This is the main figure.}
\end{figure}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
colormap={bw}{gray(0cm)=(0); gray(1cm)=(1)}]
\addplot+[scatter,only marks,
domain=0:8,samples=100]
{exp(x)};
\node [above right] at (rel axis cs:0.1,0.25) {\includegraphics[width=3cm]{piv}};
\end{axis}
\end{tikzpicture}
\caption{This is the main figure.}
\end{figure}
\end{document}
答案2
对于 Asymptote,您可以使用label
命令来包含外部 EPS 图形,如手册(版本 2.24,第 19 页):
该函数
string graphic(string name, string options="")
返回一个字符串,可用于包含封装的 PostScript (EPS) 文件。其中,name 是要包含的文件的名称,options 是一个字符串,其中包含以逗号分隔的可选边界框 (bb=llx lly urx ury
)、宽度 (width=value
)、高度 (height=value
)、旋转 (angle=value
)、缩放 (scale=factor
)、裁剪 (clip=bool
) 和草稿模式 (draft=bool
) 参数列表。该layer()
函数可用于强制将未来的对象绘制在所包含图像的顶部:
label(graphic("file.eps","width=1cm"),(0,0),NE);
layer();
答案3
Asymptote 支持直接导入外部图像,你可以在其 GitHub 源代码库中查看其示例代码正交中心.asy,png 文件位于此处图标以供参考。
import geometry;
import math;
size(7cm,0);
if(!settings.xasy && settings.outformat != "svg") settings.tex="pdflatex";
real theta=degrees(asin(0.5/sqrt(7)));
pair B=(0,sqrt(7));
pair A=B+2sqrt(3)*dir(270-theta);
pair C=A+sqrt(21);
pair O=0;
pair Ap=extension(A,O,B,C);
pair Bp=extension(B,O,C,A);
pair Cp=extension(C,O,A,B);
perpendicular(Ap,NE,Ap--O,blue);
perpendicular(Bp,NE,Bp--C,blue);
perpendicular(Cp,NE,Cp--O,blue);
draw(A--B--C--cycle);
draw("1",A--O,-0.25*I*dir(A--O));
draw(O--Ap);
draw("$\sqrt{7}$",B--O,LeftSide);
draw(O--Bp);
draw("4",C--O);
draw(O--Cp);
dot("$O$",O,dir(B--Bp,Cp--C),red);
dot("$A$",A,dir(C--A,B--A),red);
dot("$B$",B,NW,red);
dot("$C$",C,dir(A--C,B--C),red);
dot("$A'$",Ap,dir(A--Ap),red);
dot("$B'$",Bp,dir(B--Bp),red);
dot("$C'$",Cp,dir(C--Cp),red);
label(graphic("piicon.png","width=2.5cm, bb=0 0 147 144"),Ap,5ENE);