Вставка графиков в асимптоты или pgfplots

Вставка графиков в асимптоты или pgfplots

Как можно вставить другую графику в Asymptote или pgfplots? Ниже приведен MWE в pgfplots, который создает три фигуры в документе. Основная фигура, в которую я хочу вставить графику, — это графика 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. Это рисунок 1.

Это рисунок 2, представляющий собой график pgfplots. Это рисунок 2

Это рисунок 3, представляющий собой изображение в формате jpg.

Это рисунок 3.

Это объединенные рисунок 1 и рисунок 2. Рисунок 2 находится внутри рисунка 1 в верхнем левом углу. Я хотел бы, чтобы этот рисунок был векторной графикой Это объединенный рисунок 1 и рисунок 2.

Это объединенные рисунок 1 и рисунок 3. Рисунок 3 помещен внутри рисунка 1 в верхнем левом углу. Я бы хотел, чтобы рисунок 1 все еще был векторной графикой. Это объединенный рисунок 1 и рисунок 3.

Я был бы благодарен, если бы кто-нибудь помог мне вставить другую векторную графику, а также растровую графику в 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.ортоцентр.легкий, файл png находится здесьpiicon.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);

Обратите внимание на последний оператор кода. Вот скриншот результата pdf. снимок экрана сгенерированного PDF-файла

Связанный контент