第二版

第二版

我从 Matlab 中获得了一组数据,并据此创建了图形。使用 Latex 绘制的图形效果非常好。我在该图形的背景中添加了一个彩色正方形,效果也很好。这里出现了第一个问题。绘制正方形时,连接标记的线消失了,这是某种层问题吗?

我的主要问题是,如何在图内(中间)放置一个文本框?这个框应该有一个边框,以及一个从框指向曲线上的一个标记点​​的箭头。文本最多有 3 行,包含数学公式。我第一次尝试显示pgfplotsset文本,但我不知道如何设置距离和框边框。

我第二次尝试使用draw显示一个箭头,但绘制彩色方块时它会消失,不知何故这不允许多行文本(\\\newline不起作用)。也许也可以这样做,使选定的标记变为粗体或突出显示?

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[%
   width=4.521in,
   scale = 0.6,
   height=3.566in,
   at={(0.758in,0.481in)},
   scale only axis,
   separate axis lines,
   every outer x axis line/.append style={black},
   every x tick label/.append style={font=\color{black}},
   xmin=-0.1,
   xmax=1.1,
   xtick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,    0.9,  1,  1.1},
   xminorticks=true,
   xlabel={FAR},
   every outer y axis line/.append style={black},
   every y tick label/.append style={font=\color{black}},
   ymin=-0.1,
   ymax=1.2,
   ytick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1,  1.1,  1.2},
   yminorticks=true,
   ylabel={TPR},
   axis background/.style={fill=white},
   ]
   \addplot [color=blue,solid,mark=o,mark options={solid},forget plot]   %only marks
   table[row sep=crcr]{%
   1    1\\
   1    1\\
   1    1\\
   1    1\\
   0.990942028985507    1\\
   0.919466403162056    1\\
   0.750101951188908    1\\
   0.543799799234582    1\\
   0.392296411318151    0.958333333333333\\
   0.29586627140975 0.958333333333333\\
   0.227355072463768    0.916666666666667\\
   0.181159420289855    0.875\\
   0.148962450592885    0.791666666666667\\
   0.106966403162055    0.75\\
   0.0707345191040843   0.75\\
   0.039937417654809    0.708333333333333\\
   0.0271739130434783   0.666666666666667\\
   0.0145750988142293   0.625\\
   0.00543478260869565  0.541666666666667\\
   0.00181159420289855  0.5\\
   0    0.375\\
   0    0.333333333333333\\
   0    0.291666666666667\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.166666666666667\\
   0    0.166666666666667\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.0833333333333333\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   };
   %first attempt:
   %\pgfplotsset{
   %    after end axis/.code={      
   %        \node[pin={[text width=3cm,pin edge={black}]-45:       {\tiny{sample: text text\\ more text text\\$math equation: \phi$}}}] at      (axis cs:0.181, 0.875) { };  
   %    }
   %}

   % Second attemp:
   %\draw[<-](axis cs:0.181,    0.875)-- +(10pt,10pt) node[right] {here\\ test};

   \fill [blue!10!white,rounded corners] (axis cs:0,0) rectangle (axis cs:1,1);

   \end{axis}
   \end{tikzpicture}%
   \end{document}

该图像使用pgfplotsset

使用 pgfplotsset 的图像

这里我用的是\draw

使用 \draw 绘制图像

答案1

要在绘图后面绘制彩色方块,只需将 放在\fill之前\addplot即可。通常,内容是按照它们添加到代码中的顺序绘制的,因此通过添加第一个,\fill它最终会位于底部。

要添加带有文本的框,你可以使用以下命令:

\draw[->,shorten >=1mm,shorten <=1mm] (rel axis cs:0.5,0.5) node[right,draw,align=left] {here\\ test}  -- (axis cs:0.181, 0.875);

rel axis cs是一个坐标系,其中 (0,0) 是轴的左下角,(1,1) 是右上角,因此 (0.5,0.5) 是中间。要允许节点中的换行,您必须添加文本的特定对齐方式(此处align=left)或设置节点中文本区域的宽度(例如text width=2cm)。shorten <shorten >分别将行的开头和结尾缩短指定的长度。

要绘制 的边框node,只需将其添加draw到其选项中,如上所示。如果您想用特定颜色(例如蓝色)绘制它,则写入draw=blue。(同样,您可以用 来添加背景填充fill=<colorname>

在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
  \begin{axis}[%
   width=4.521in,
   scale = 0.6,
   height=3.566in,
   at={(0.758in,0.481in)},
   scale only axis,
   separate axis lines,
   every outer x axis line/.append style={black},
   every x tick label/.append style={font=\color{black}},
   xmin=-0.1,
   xmax=1.1,
   xtick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,    0.9,  1,  1.1},
   xminorticks=true,
   xlabel={FAR},
   every outer y axis line/.append style={black},
   every y tick label/.append style={font=\color{black}},
   ymin=-0.1,
   ymax=1.2,
   ytick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1,  1.1,  1.2},
   yminorticks=true,
   ylabel={TPR},
   axis background/.style={fill=white},
   ]

   \fill [blue!10!white,rounded corners] (axis cs:0,0) rectangle (axis cs:1,1);

   \addplot [color=blue,solid,mark=o,mark options={solid},forget plot]   %only marks
   table[row sep=crcr]{%
   1    1\\
   1    1\\
   1    1\\
   1    1\\
   0.990942028985507    1\\
   0.919466403162056    1\\
   0.750101951188908    1\\
   0.543799799234582    1\\
   0.392296411318151    0.958333333333333\\
   0.29586627140975 0.958333333333333\\
   0.227355072463768    0.916666666666667\\
   0.181159420289855    0.875\\
   0.148962450592885    0.791666666666667\\
   0.106966403162055    0.75\\
   0.0707345191040843   0.75\\
   0.039937417654809    0.708333333333333\\
   0.0271739130434783   0.666666666666667\\
   0.0145750988142293   0.625\\
   0.00543478260869565  0.541666666666667\\
   0.00181159420289855  0.5\\
   0    0.375\\
   0    0.333333333333333\\
   0    0.291666666666667\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.166666666666667\\
   0    0.166666666666667\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.0833333333333333\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   };


   \draw[->,shorten >=1mm,shorten <=1mm] (rel axis cs:0.5,0.5) node[right,draw,align=left] {here\\ test}  -- (axis cs:0.181,    0.875);


\end{axis}
\end{tikzpicture}%
\end{document}

第二版

这里首先将数据保存到表中。表中特定行的值被读取并保存到宏中\myX,然后\myY使用

\pgfplotstablegetelem{10}{[index]0}\of{\mydata}
\pgfmathsetmacro{\myX}{\pgfplotsretval}
\pgfplotstablegetelem{10}{[index]1}\of{\mydata}
\pgfmathsetmacro{\myY}{\pgfplotsretval}

\pgfplotstablegetelem{<row no>}{<column>}宏从表中检索指定的值并将其保存到\pgfplotsretval\pgfmathsetmacro用于定义\myX\myY,而它们又用于绘制红色圆圈并放置箭头。

在此处输入图片描述

\documentclass[border=10pt]{standalone}
\usepackage{pgfplots}
\pgfplotstableread[row sep=crcr]{%
   1    1\\
   1    1\\
   1    1\\
   1    1\\
   0.990942028985507    1\\
   0.919466403162056    1\\
   0.750101951188908    1\\
   0.543799799234582    1\\
   0.392296411318151    0.958333333333333\\
   0.29586627140975 0.958333333333333\\
   0.227355072463768    0.916666666666667\\
   0.181159420289855    0.875\\
   0.148962450592885    0.791666666666667\\
   0.106966403162055    0.75\\
   0.0707345191040843   0.75\\
   0.039937417654809    0.708333333333333\\
   0.0271739130434783   0.666666666666667\\
   0.0145750988142293   0.625\\
   0.00543478260869565  0.541666666666667\\
   0.00181159420289855  0.5\\
   0    0.375\\
   0    0.333333333333333\\
   0    0.291666666666667\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.25\\
   0    0.166666666666667\\
   0    0.166666666666667\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.125\\
   0    0.0833333333333333\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0.0416666666666667\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
   0    0\\
}\mydata
\begin{document}
\begin{tikzpicture}
  \begin{axis}[%
   width=4.521in,
   scale = 0.6,
   height=3.566in,
   at={(0.758in,0.481in)},
   scale only axis,
   separate axis lines,
   every outer x axis line/.append style={black},
   every x tick label/.append style={font=\color{black}},
   xmin=-0.1,
   xmax=1.1,
   xtick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,    0.9,  1,  1.1},
   xminorticks=true,
   xlabel={FAR},
   every outer y axis line/.append style={black},
   every y tick label/.append style={font=\color{black}},
   ymin=-0.1,
   ymax=1.2,
   ytick={-0.1,  0,  0.1,  0.2,  0.3,  0.4,  0.5,  0.6,  0.7,  0.8,  0.9,  1,  1.1,  1.2},
   yminorticks=true,
   ylabel={TPR},
   axis background/.style={fill=white},
   ]

   \fill [blue!10!white,rounded corners] (axis cs:0,0) rectangle (axis cs:1,1);

   \addplot [color=blue,solid,mark=o,mark options={solid},forget plot]   %only marks
   table {\mydata};


   % change the number 10 (row number in table) to select a different marker
   \pgfplotstablegetelem{10}{[index]0}\of{\mydata}
   \pgfmathsetmacro{\myX}{\pgfplotsretval}
   \pgfplotstablegetelem{10}{[index]1}\of{\mydata}
   \pgfmathsetmacro{\myY}{\pgfplotsretval}

   \node[draw,align=left] (textbox) at (rel axis cs:0.5,0.5)  {here\\ test \\ $f(x)=\int\sin x\,\mathrm{d}x$};
   \draw[->,shorten >=2mm] (textbox) -- (axis cs:\myX,\myY) node[draw,circle,red,inner sep=0pt,minimum size=7pt,very thick]{};
\end{axis}
\end{tikzpicture}%
\end{document}

相关内容