在 TikZ 的内容区域之外绘制箭头

在 TikZ 的内容区域之外绘制箭头

我有一个相当标准的 tikz 图。为了澄清 y 轴上的低值实际上更快/更好,我想在实际绘图区域之外绘制一个额外的箭头,如附件所示。我发现了各种绘图方法,\draw但它们都只在绘图的内容区域内运行 - 我如何在该区域之外绘制?

以下是我目前如何创建情节的 MWE:

\documentclass[11pt,a4paper]{article}
\usepackage{pgfplots, pgfplotstable}    
\usepackage{tikz}

\begin{document}
\begin{figure}
\begin{tikzpicture}[scale=0.75]
         \pgfplotsset{grid style={dashed,gray}}
        \begin{axis}[
        xlabel={X}, 
        ylabel=time,
        xmin=0.8,
        xmax=1.0,
        ymin=1,     
        ymax=200,   
        xmajorgrids=true,
        ymajorgrids=true,
    ]      

\addplot+[
            black,
            mark options={fill= black},
            only marks,
            mark size=2,
            mark=square*,
        ] 
        coordinates {
            (0.805, 10)
            (0.85, 20)

        };



    \end{axis}
    \end{tikzpicture}   

\end{figure}

\end{document}

在此处输入图片描述

答案1

我们nameaxis以便能够在axis环境之外访问它。

然后,我们在它的一些关键点之间画一条线。

输出

在此处输入图片描述

代码

\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows}

\begin{document}
\begin{tikzpicture}[scale=0.75, >=stealth']
  \pgfplotsset{grid style={dashed,gray}}
  \begin{axis}
    [
      name=myGraph,
      xlabel={X}, 
      ylabel=time,
      xmin=0.8,
      xmax=1.0,
      ymin=1,     
      ymax=200,   
      xmajorgrids=true,
      ymajorgrids=true,
    ]      

    \addplot+
    [
      black,
      mark options={fill= black},
      only marks,
      mark size=2,
      mark=square*,
    ] 
    coordinates 
    {
      (0.805, 10)
      (0.85, 20)
    };
  \end{axis}

  \def\myShift{-2cm}
  \draw [red, very thick, ->] ([xshift=\myShift]myGraph.north west) -- ([xshift=\myShift]myGraph.south west) node [midway, rotate=90, fill=white, yshift=2pt] {faster} ;
  %\draw [red, very thick, ->] (myGraph.left of north west) -- (myGraph.left of south west) node [midway, rotate=90, fill=white, yshift=2pt] {faster} ; % an alternative way
\end{tikzpicture}
\end{document}

干杯,

答案2

编辑:根据评论中的建议rel axis cs进行更改。axis description cs

您可以使用axis description cs坐标系来表示如下内容:

\documentclass{article}

\usepackage{pgfplots}

\begin{document}
\begin{tikzpicture}
    \begin{axis}
        [
            grid style = {dashed, gray},
            xlabel={X}, 
            ylabel=time,
            xmin=0.8,
            xmax=1.0,
            ymin=1,     
            ymax=200,   
            xmajorgrids=true,
            ymajorgrids=true,
            clip = false % <--- Important
        ]      
        \addplot+
        [
            black,
            mark options={fill= black},
            only marks,
            mark size=2,
            mark=square*,
        ] 
        coordinates { (0.805, 10) (0.85, 20) };
        % add annotation here:
        \draw[red, ->] ([xshift = -2cm] axis description cs:0, 1) -- node[left] { Faster } ([xshift = -2cm] axis description cs:0, 0);
    \end{axis}
\end{tikzpicture}   
\end{document}

答案图片 该点(axis description cs:0, 1)是左上角的点,(axis description cs:0, 0)是左下角的点。两个点都偏移了2cm(任意,根据您的喜好选择)。请注意,您必须关闭环境中的裁剪axis,否则轴外绘制的所有内容都将不可见。

我一直觉得,这样的事情可以得到更好的解决。在我看来,你应该始终选择你的单位和你想要展示的东西来反映你的观点。在这种情况下,也许可以使用时间的倒数(也许是频率)来绘制数据?我不知道你在展示什么,但请记住,(在我看来)最好不要通过巧妙的技术/技巧(添加自定义注释)来解决问题,而要使用正确的可视化方法。

相关内容