# Positioning pgfplots axis in tikzpicture

I want to put a pgfplots plot beside several other pdf images that I import into my document, but I can't figure out how to position the pgfplots axis in the larger tikzpicture:

\documentclass{article}

\usepackage{graphicx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{figure*}

\begin{center}
\begin{tikzpicture}

\node[anchor=south west] (img) at (0,0)
{\includegraphics[width=0.3\linewidth]{1.pdf}};
\node[anchor=south west]
at (0.01\linewidth,0.01\linewidth) {a};

\node[anchor=south west] (img) at (0.33\linewidth,0)
{\includegraphics[width=0.3\linewidth]{1.pdf}};
\node[anchor=south west]
at (0.34\linewidth,0.01\linewidth) {b};

\begin{axis}[width=0.45\linewidth, yticklabels={}]
table [x index=0, y index=1]
{hist.txt}
\closedcycle;
\end{axis}

\end{tikzpicture}
\end{center}

\caption{\label{detdemo}An example of my output}
\end{figure*}
\end{document}


here is the example output:

The axis seems to begin from the (0,0) of the tikzpicture.

I wanted to see how I can position this axis after the second picture? Such that its bottom left corner is on (0.66\linewidth,0).

• You want the plot to come after the second picture? – user11232 Mar 24 '14 at 10:44
• Yes, I want the bottom left point of the plot to be on (0.66\linewidth,0). – makhlaghi Mar 24 '14 at 10:46

You can define the coordinate for the lower left corner of the axis with the at key,

at={(0.66\linewidth,0)}


Add this to the axis options.

\documentclass{article}

\usepackage{graphicx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}

\begin{document}
\begin{figure*}

\begin{center}
\begin{tikzpicture}

\node[anchor=south west] (img) at (0,0)
{\includegraphics[width=0.3\linewidth]{example-image-a}};
\node[anchor=south west]
at (0.01\linewidth,0.01\linewidth) {a};

\node[anchor=south west] (img) at (0.33\linewidth,0)
{\includegraphics[width=0.3\linewidth]{example-image-b}};
\node[anchor=south west]
at (0.34\linewidth,0.01\linewidth) {b};

\begin{axis}[width=0.45\linewidth, yticklabels={},at={(0.66\linewidth,0)}]
{x}
\closedcycle;
\end{axis}

\end{tikzpicture}
\end{center}

\caption{\label{detdemo}An example of my output}
\end{figure*}
\end{document}

• very simple and nice solution. Thank you very much. – makhlaghi Mar 24 '14 at 11:14

As a quick hack, you can either use a scope with a proper xshift or put the axis inside another node.

\documentclass{article}

\usepackage{graphicx}
\usepackage{pgfplots}
\pgfplotsset{compat=1.9}
\usetikzlibrary{positioning}

\begin{document}
\begin{figure*}

\begin{center}
\begin{tikzpicture}

\node[anchor=south west] (img1) at (0,0)
{\includegraphics[width=0.3\linewidth]{example-image-a}};
\node[anchor=south west]
at (0.01\linewidth,0.01\linewidth) {a};

\node[anchor=south west] (img2) at (0.33\linewidth,0)
{\includegraphics[width=0.3\linewidth]{example-image-b}};
\node[anchor=south west]
at (0.34\linewidth,0.01\linewidth) {b};
\begin{scope}[xshift=0.66\linewidth]
\begin{axis}[width=0.45\linewidth, yticklabels={}]
{x}       %% I changed this change it back
\closedcycle;
\end{axis}
\end{scope}

\end{tikzpicture}
\end{center}

\caption{\label{detdemo}An example of my output comes here}
\end{figure*}
\end{document}


But it will be better if you use another tikzpicture environment IMO.

• See my answer ... – Torbjørn T. Mar 24 '14 at 11:08
• @TorbjørnT. Technically both do the same :) Yours is more pgfplots way though. – user11232 Mar 24 '14 at 11:15