如何在图表上为曲线添加标签

如何在图表上为曲线添加标签

我有以下图表(和 2 个类似的图表),如下所示,是我用 MATLAB 生成的:

在此处输入图片描述

我希望曲线带有标签,而不是图例,例如,在数学字体中,蓝色曲线下方某处会显示“Kn=0.0”,然后一条黑线将其连接到曲线,其他的也是如此。我知道这种事情可以在图像编辑软件中完成,但我想知道我是否可以使用 LaTeX 将图像添加到 PDF 文档中,是否有某种方法可以使用 LaTeX 手动添加这些标签?我将包含用于将图像放到 PDF 页面上的 LaTeX 代码:

\documentclass[11pt]{article}

\usepackage{graphicx}
\graphicspath{{./pics/}}
\usepackage{color}
\usepackage{amsmath}
\usepackage{tabularx}
\usepackage{rotating}
%\usepackage{geometry}
%\usepackage{epic}

%\geometry{left=2.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm}
\usepackage[a4paper,total={170mm, 247mm}]{geometry}

%\usepackage{mdframed}
%\usepackage{boxedminipage}

\pagestyle{empty}

\begin{document}

\begin{figure}[h]
\begin{center}
\includegraphics[keepaspectratio=true,
width=0.45\textwidth]{example-image-a}\\
\vspace{5mm}
\includegraphics[keepaspectratio=true,
width=0.45\textwidth]{example-image-b}\\
\vspace{5mm} 
\includegraphics[keepaspectratio=true,
width=0.45\textwidth]{example-image-c}\\

\end{center}
\begin{picture}(0,0)
\put(100,560){(a)} 
\put(100,370){(b)}
\put(100,180){(c)}
\put(250,16){$r$}

\put(120,460){
\begin{rotate}{90}
{$u_r / U_{\infty}$}
\end{rotate}}
\put(120,280){
\begin{rotate}{90}
{$u_\alpha / U_{\infty}$}
\end{rotate}}
\put(120,100){
\begin{rotate}{90}
{$\theta/U_{\infty}$}
\end{rotate}}
\end{picture}
%\vspace{-5mm}
\end{figure}

\end{document}

此代码将 3 个图形放到 PDF 文档的一页上,并使用手动命令用适当放置的轴标记它们,所以我想知道您是否可以使用 LaTex 命令手动创建曲线的线条并标记它们?

答案1

由于您在原始示例中使用了图片模式,因此这里有一个使用图片命令来绘制标签和线条的答案。

标签只需要一个 x 和 y 坐标,就像您已经用于轴文本一样。线条被绘制为方向向量和长度(因此不是像 PGF/TikZ 中那样的起点和终点)。方向向量由 -6 到 6 之间的 x 和 y 分量组成(请参阅https://en.wikibooks.org/wiki/LaTeX/Picture#Line_segments)。要绘制虚线,您可以使用\multiput它,它有一个起点、一个差异向量来计算下一个点、线段的数量以及每个线段的绘制命令(例如\line)。

请注意,您可以在其中使用格式命令\put,例如颜色和文本大小。

MWE,绘制在你的帖子截图上:

\documentclass[11pt]{article}

\usepackage{graphicx}
\usepackage{xcolor}
\usepackage{rotating}
\usepackage[a4paper,total={170mm, 247mm}]{geometry}

\begin{document}

\begin{figure}[h]
\begin{center}
\includegraphics[keepaspectratio=true,
width=0.45\textwidth]{Dk1V2}\\
\end{center}
\begin{picture}(0,0)
\put(100,180){(a)}
\put(250,16){$r$}

\put(120,100){
\begin{rotate}{90}
{$\theta/U_{\infty}$}
\end{rotate}}
\put(250,120){\tiny\color{blue}$K_n=0.0$}
\put(250,122){\line(-3,2){19}}
\put(220,100){\tiny\color{red}$K_n=0.2$}
\put(220,102){\color{gray}\line(-3,2){24}}
\put(190,80){\tiny\color{orange}$K_n=1.0$}
\multiput(200,85)(-1,1){24}
{\line(0,0){0.5}}
\end{picture}
\end{figure}

\end{document}

结果:

在此处输入图片描述

备注:当然这不是最方便的解决方案,我只是为了完整性而添加它。最好使用其他答案中的 PGF/TikZ,或者在 Matlab 本身中添加标签。

答案2

您可以用它axis cs来描述环境中的坐标或节点axis。我使用我自己的曲线给出了一个例子。

\documentclass[border=3mm]{standalone}
\usepackage{pgfplots}
    \pgfplotsset{compat=1.16}
    \tikzset{font=\small}
\begin{document}
\begin{tikzpicture}[>=stealth,
    declare function={
        cV(\T,\TD,\a,\b) =
            (\a/(\T/\TD))^2 * exp(\b/(\T/\TD)) / (exp(\b/(\T/\TD))-1)^2;
    }
]
    \begin{axis}[
        legend style={at={(0.9,0.6)}},
        domain=0.001:3,
        samples=101,
        smooth,
        grid=both
    ]
        \addplot [blue]    {cV(x,0.75,1,1)};
        \addplot [red]   {cV(x,{(pi/6)^(-1/3)},1,1)};
        \addplot [yellow]   {cV(x,{(pi/3)^(-1/3)},1,1)};


    \node at (axis cs:1.5,0.8)(B){\color{blue}$K_n=0.0$};
    \draw [->](B.west)--++(160:0.35);
    \node at (axis cs:1.5,0.6)(Y){\color{yellow}$K_n=0.2$};
    \draw [->](Y.west)--++(160:0.55);
    \node at (axis cs:1.5,0.4)(R){\color{red}$K_n=1.0$};
    \draw [->](R.west)--++(160:0.62);
    \end{axis}
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容