
С помощьюКак увеличить прямоугольную область в pgfplots, добавив серый фон даже для подписей осей?иНет контента в зуме Tikz шпионМне удалось получить максимум из того, что я хотел. Используя этот пример отдельно, он выглядит так:
Для генерации изображения я использовал следующий «автономный» код.
% Source 1: https://tex.stackexchange.com/questions/102477/
% Source 2: https://tex.stackexchange.com/questions/62953/
\documentclass[tikz,border=2pt,png]{standalone}
\usepackage{pgfplots}
%\usepackage{tikz}% no needs since pgfplots loads already it
\pgfplotsset{compat=1.7} % Set the pgf plots to a current version
\usetikzlibrary{spy}
\begin{document}
\tikzset{new spy style/.style={spy scope={%
magnification=5,
size=1.25cm,
connect spies,
every spy on node/.style={
rectangle,
draw,
},
every spy in node/.style={
draw,
rectangle,
}
}
}
}
\begin{tikzpicture}[new spy style]
\begin{axis}[%
height=0.3\textwidth,
width=0.96\textwidth,
name = BG,
unbounded coords=jump,
scale only axis,
xmin=-3.68158764150225, xmax=4.05456770289782,
ymin=-1.44575077919192, ymax=1.15200357048622,
axis lines*=left,
axis equal image]
\addplot [
color=blue,
solid,
mark=+,
mark options={solid},
]
{sin(deg(x))};
\addplot [
color=red,
solid,
mark=*,
mark options={solid},
]
{sin(deg(x))+0.1};
\addplot [
color=green,
solid,
mark=x,
mark options={solid},
]
{sin(deg(x))-0.1};
\coordinate (spypoint) at (axis cs:0,0.0);
\coordinate (spyviewer) at (axis cs:1.7,-.5);
\end{axis}
%using axis coordinates and without "spy style" defined above
\spy[width=2cm,height=3cm] on (spypoint) in node [fill=white] at (spyviewer);
\end{tikzpicture}%
\end{document}
Как вы видите, мне удалось задать координаты для \spy относительно оси (ближе к концу кода). Однако мне не удалось определить размер таким же образом. В результате график может выглядеть по-другому, если его использовать в основном документе.
Я совершенно уверен, что это связано с использованием мной «высоты» и «ширины» в настройке осей и/или использованием «см» в команде \spy.
Моим предпочтительным решением было бы что-то, где я использую "\spy" таким образом, чтобы я мог ссылаться на систему координат оси, чтобы определить ее размер. Любая попытка переместить команду "\spy" внутрь "axis" до сих пор не увенчалась успехом.
Мотивацию этого вопроса можно увидеть на следующих двух изображениях, использующих мои реальные данные.
Если скомпилировано как отдельное:
И для сравнения, если скомпилировано в основном документе:
решение1
Так как все изображение масштабируется, \textwidth
я подумал, что было бы неплохо также использовать это для масштабирования \spy
поля. Поэтому замена
\spy[width=2cm,height=3cm] on (spypoint) in node [fill=white] at (spyviewer);
с
\spy[width=0.2\textwidth,height=0.3\textwidth] on (spypoint) in node [fill=white] at (spyviewer);
это все, что нужно было сделать. Если теперь ящик правильно размещен и имеет правильный размер в standalone
среде, его размер и положение сохраняются и в основном документе.