特殊轴样式定制

特殊轴样式定制

我想设计一种特殊的轴标签样式。x 轴是一条直线,没有箭头。这条线的末端下面是实际的标签,它由一个箭头组成,标签位于箭头中间。箭头的长度与线本身的长度完全相同。到目前为止,我是这样构造的:

\begin{tikzpicture}
\draw (-.5,0)--(6.5,0) ;
\draw [->,>=stealth] (5.5,-.5) -- (6.5,-.5) node [midway, fill=white, inner sep = 2pt]{$r$};
\end{tikzpicture}

虽然这看起来是我想要的样子,但我对这种建设性的方法并不满意,我宁愿用节点来解决问题。然而,当我尝试用节点来解决这个问题时,我没能正确地对齐所有内容。

我怎样才能实现这个目标?

答案1

一个可能的解决方案:它确实使用nodes(实际上也是问题)通过insert paths 的键(水平axis horizontal label和垂直axis vertical label方式)。

通过访问路径的最后一个坐标来保留对齐,这要归功于提取 TikZ 中任意点的 x,y 坐标. 箭头的宽度/高度,根据axis horizontal label/axis vertical label选择的模式,可以通过专用键进行自定义,如第二个示例所示。

代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{calc}

% Code by Peter Grill:
% https://tex.stackexchange.com/a/33706/13304
\newdimen\xval
\newdimen\yval

%\newcommand*{\getxyval}[1]{\path (#1); \pgfgetlastxy{\xval}{\yval};}%

\pgfkeys{/tikz/.cd,
  axis label distance/.initial=0.5,
  axis label distance/.get=\axislabeldist,
  axis label distance/.store in=\axislabeldist,
  axis label width/.initial=1,
  axis label width/.get=\axislabelwd,
  axis label width/.store in=\axislabelwd,
  lb option/.style={midway, fill=white, inner sep = 2pt},
  append horizontal label/.style={
    insert path={
     \pgfextra{
       \pgfgetlastxy{\xval}{\yval};
       \draw[<-,>=stealth] 
        ($(\xval,\yval)-(0,\axislabeldist)$) -- 
        ($(\xval,\yval)-(\axislabelwd,\axislabeldist)$) 
        node [lb option]{$#1$};
      } 
    }
  },
  append horizontal label/.default={},
  append vertical label/.style={
    insert path={
     \pgfextra{
       \pgfgetlastxy{\xval}{\yval};
       \draw[<-,>=stealth] 
        ($(\xval,\yval)-(\axislabeldist,0)$) -- 
        ($(\xval,\yval)-(\axislabeldist,\axislabelwd)$) 
        node [lb option]{$#1$};
      } 
    }
  },
  append vertical label/.default={}
}


\begin{document}
\begin{tikzpicture}
\draw (-.5,0)--(3.5,0)[append horizontal label=r] ;
\end{tikzpicture}

\begin{tikzpicture}[axis label distance=0.25cm,
 axis label width=0.75cm]
\draw (-1.5,-1.5)--(-1.5,3)[append vertical label=y] ;

\draw (-2,-1)--(4,-1)[append horizontal label=x];
\end{tikzpicture}

\end{document}

结果:

在此处输入图片描述

相关内容