在 pgfplots 轴环境中放置节点

在 pgfplots 轴环境中放置节点

如何在坐标系中指定节点的位置?我尝试了以下方法,但三角形不是以 (1.1,0.2) 为中心,而是放置在其旁边。请问我遗漏了什么?

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=major]
\addplot+ coordinates{(1, 0.2)};
\node[color=red] at (axis cs:1.1, 0.2) {\pgfuseplotmark{triangle*}};
\end{axis}
\end{tikzpicture}
\end{document}

tikz图片

事实上,最终我想提示三角形的坐标为 (1.1,0.2)。这个容易实现吗?

答案1

轻松添加\(...\)。您可以{\pgfuseplotmark{triangle*}}用替换{\(\pgfuseplotmark{triangle*}\)}

结果:

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=major]
\addplot+ coordinates{(1, 0.2)};
% \node[color=red] at (axis cs:1.1, 0.2) {\pgfuseplotmark{triangle*}}; old
\node[color=green,scale=1]  at (axis cs:1.1, 0.2) {\(\pgfuseplotmark{triangle*}\)} ; %<-new line
\end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

答案2

当我使用运行你的代码时pgfplots 2016/08/10 v1.14,三角形居中。请检查您是否使用了最新版本。

为了用三角形的尖端定位三角形,您可以定义自己的绘图标记mytriangle( 的修改版triangle*):

\makeatletter
\newcommand\pgf@plot@mark@mytriangle
  {\pgfpathmoveto{\pgfqpoint{0pt}{0pt}}%
   \pgfpathlineto{\pgfqpointpolar{-60}{2\pgfplotmarksize}}%
   \pgfpathlineto{\pgfqpointpolar{-120}{2\pgfplotmarksize}}%
   \pgfpathclose\pgfusepathqfillstroke
  }
\makeatother

在此处输入图片描述

\documentclass{standalone}
\usepackage{pgfplots}
\makeatletter
\newcommand\pgf@plot@mark@mytriangle
  {\pgfpathmoveto{\pgfqpoint{0pt}{0pt}}%
   \pgfpathlineto{\pgfqpointpolar{-60}{2\pgfplotmarksize}}%
   \pgfpathlineto{\pgfqpointpolar{-120}{2\pgfplotmarksize}}%
   \pgfpathclose\pgfusepathqfillstroke
  }
\makeatother

\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=major]
\addplot+ coordinates{(1, 0.2)};
\node[color=red] at (axis cs:1.1, 0.2) {\pgfuseplotmark{mytriangle}};
\end{axis}
\end{tikzpicture}
\end{document}

答案3

您不做这样的标记有什么特殊原因吗?

\documentclass{standalone}
\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=major]
\addplot[mark=triangle*,red]  coordinates{(1, 0.2)};
\end{axis}
\end{tikzpicture}
\end{document}

如果你坚持使用节点,那么你的例子将按pgfplots 1.14预期工作。三角形以给定的坐标为中心:

\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[grid=major]
\addplot+ coordinates{(1, 0.2)};
\node[color=red] at (1.1, 0.2) {\pgfuseplotmark{triangle*}};
\end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

附录: 节点完全居中(要看到这一点,请draw向节点添加选项),但节点内容不一定位于节点中央。这似乎是您的问题,与 无关pgfplots

因此,如果您喜欢使用节点,请查看以下示例(其中节点具有三角形)是否是可接受的解决方案:

\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.14}
\usepgflibrary{shapes.geometric}

\begin{document}
    \begin{tikzpicture}
\begin{axis}[grid=major]
\addplot coordinates{(1, 0.2)};
\node[regular polygon, regular polygon sides=3,
      fill=red, 
      semitransparent,
      inner sep=3pt] at (1.1, 0.2) {};% fore real use 'inner sep=1.2pt' would be more appropriate
\end{axis}
    \end{tikzpicture}
\end{document}

如果您有更多这样的节点,您可以为其定义样式,例如:

\tikzset{mytrianglemark/.style={regular polygon, regular polygon sides=3,
                                fill=red,inner sep=1.2pt}

并存储在前言或之后\begin{tikzpicture}

相关内容