我需要pgfplots
使用 从文本到图形绘制箭头TikZ
。由于某种原因,箭头坐标不在我希望它们在图形中的位置pgfplots
。以下是一个例子:
\documentclass[12pt]{article}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{width=7cm}
\begin{document}
Text \tikz[remember picture] \node[circle,fill=red!50] (n1) {}; text.
\vspace{1in}
\pgfplotsset{domain=-1:1}
\begin{tikzpicture}
\begin{axis}[remember picture,xlabel=A normal sized $x$ label]
\addplot[smooth,blue,mark=*] {x^2};
\node (c) at (axis cs:0,0.5) {$a$};
\end{axis}
\end{tikzpicture}
\vspace{1in}
Text \tikz[remember picture] \node[fill=blue!50] (n2) {}; text.
\begin{tikzpicture}[remember picture,overlay]
\draw [->,red,very thick] (n1) -- (n2);
\draw [overlay,->,very thick] (c) -- (n2);
\end{tikzpicture}
\end{document}
字母“a”似乎位于 处的正确位置(0,0.5)
,但黑色箭头的起点却不正确。它似乎太靠右了。
红色箭头pgfplots
似乎是正确的,它没有使用图表定义。
是否存在我遗漏的选项?
感谢您的任何帮助!
答案1
这似乎是 pgfplots 中的一个错误,我会处理它。
虽然我没有看到错误,但我可以说如何在错误修复准备好之前避免该问题 - 前提是你正在运行 pgfplots 1.6.1(最新的稳定版本):
添加
\pgfplotsset{cell picture=if necessary}
到你的序言(或\begin{axis}[..., cell picture=if necessary]
选定的轴)将修复它。
注意力:在这种情况下,您需要remember picture
从移动\begin{axis}
到\begin{tikzpicture}
!
您也可以说cell picture=false
。在这种情况下,如果 pgfplots 确实需要初始设置(正如cell picture=true
您可能已经猜到的那样),您将收到错误消息。
技术说明:
我发现这与 pgfplots 创建所谓的“单元格图片”并移动它以实现其定位选择(锚点)的事实有某种关系。单元格图片意味着它会\tikzpicture...\endtikzpicture
在内部创建一个额外的图片,就像 pgf 矩阵一样。
初始值cell picture=true
主要是为了向后兼容。一般来说,避免使用单元格图片有好处。它们是必要的如果你选择一个不在列表中的锚点
北、西北、西、西南、南、东南、东、东北、北、中心、原点、原点上方、原点左侧、原点右侧、原点下方。
例如,选择anchor=above north
需要一张手机图片。
编辑2016 年 7 月
@Elmar 指出该问题尚未完全解决,并提供了最简单的例子
%compile with: pdflatex -shell-escape main && make -f main.makefile && pdflatex main
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzset{external/export=false, external/mode=list and make}
\tikzexternalize
\pgfplotsset{compat=1.13}
\begin{document}
\tikz[remember picture] \node {X};
\tikzset{external/export=true}
\begin{tikzpicture}
\begin{axis}[clip=false]
\addplot {x};
\node (A) at (yticklabel cs:0.5) {A};
\end{axis};
\node at (A) {B};
\end{tikzpicture}
\end{document}
他说得有道理——问题仍然存在。在他的例子中,问题是由文件中main.aux
引用“记住的位置”的条目引起的——它意外地与第二幅图像相关联。
我会调查一下。目前,解决办法似乎是不是优化第一张图片,因为这将在外部化图形时产生正确的内部图片标识符:
%compile with: pdflatex -shell-escape main && make -f main.makefile && pdflatex main
\documentclass{article}
\usepackage{pgfplots}
\usetikzlibrary{external}
\tikzset{external/export=false, external/mode=list and make}
\tikzexternalize
\pgfplotsset{compat=1.13}
\begin{document}
{\tikzset{external/optimize=false}%
\tikz[remember picture] \node {X};
}%
\tikzset{external/export=true}
\begin{tikzpicture}
\begin{axis}[clip=false]
\addplot {x};
\node (A) at (yticklabel cs:0.5) {A};
\end{axis};
\node at (A) {B};
\end{tikzpicture}
\end{document}