我有以下图表(和 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}