% Mind section ‘4.17 Custom annotations‘ of the PGFplots manual Revision 1.12 (2015/01/31).
\documentclass[margin=1cm]{standalone}
?
\usepackage{pgfplots}
?
\pgfplotsset{compat=newest}
?
%%% START MACRO %%%
\newcommand{\slopeTriangle}[5]
{
% #1. A点的横坐标相对位置,xmin+(#1)*(xB-xA)即为A的绝对横坐标
% #2. x方向的长度,既XB-XA的大小
% #3. y方向的偏移量, B点的纵坐标相对位置
% #4. 小三角的斜率
% #5. 绘图可选参数,控制颜色等属性
?
\pgfplotsextra
{
\pgfkeysgetvalue{/pgfplots/xmin}{\xmin}
\pgfkeysgetvalue{/pgfplots/xmax}{\xmax}
\pgfkeysgetvalue{/pgfplots/ymin}{\ymin}
\pgfkeysgetvalue{/pgfplots/ymax}{\ymax}
?
% 通过参数计算各变量.
\pgfmathsetmacro{\xA}{\xmin+(#1)*(\xmax-\xmin)}
\pgfmathsetmacro{\yA}{\ymin+#3*(\ymax-\ymin)}
\pgfmathsetmacro{\xB}{\xmin+(#1+#2)*(\xmax-\xmin)}
\pgfmathsetmacro{\yB}{\yA}
\pgfmathsetmacro{\xC}{\xB}
\pgfmathsetmacro{\yC}{\yB-(\xB-\xA)*#4}
?
% 定义A,B,C三点的坐标.
\coordinate (A) at (axis cs:\xA,\yA);
\coordinate (B) at (axis cs:\xB,\yB);
\coordinate (C) at (axis cs:\xC,\yC);
?
% 绘制斜率三角.
\draw[#5] (A)-- node[pos=0.5,anchor=south] {1}
(B)-- node[pos=0.5,anchor=west] {#4}
(C)--
cycle;
}
}
%%% END MACRO %%%
?
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
%xtick={-0.1,0,1,1.1},
xlabel=$x$,
%ytick={-0.2,0,2,2.2},
ylabel style={rotate=-90},
ylabel=$y$,
unit vector ratio=2 1 1,
clip=false
]
\addplot[blue,domain=0:1] {-x};
\addplot[red,domain=0:1] {-2*x};
?
\slopeTriangle{0.8}{0.1}{0.8}{1}{blue}; % USE OF MACRO.
\slopeTriangle{0.8}{0.1}{0.65}{2}{red}; % USE OF MACRO.
\end{axis}
\end{tikzpicture}
\end{document}
原文:http://www.cnblogs.com/yuehq/p/5125835.html