使用选项时,我需要更改 pgfplots 的默认轴箭头大小axis lines=center
。以下这个答案,我尝试了这个代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows, decorations.markings}
\begin{document}
\begin{tikzpicture}
\tikzstyle{myaxis} = [decoration={markings, mark=at position 1 with {\arrow[ultra thick]{latex'}}},
postaction={decorate}, shorten >=0.4, line width=0.02pt];
\begin{axis}[axis lines=center, axis line style={myaxis}]
\end{axis}
\end{tikzpicture}
\end{document}
但它不能像我期望的那样工作,因为轴线根本没有画出来。
你能帮我吗?谢谢,
路易吉
答案1
自定义轴线有点不直观:首先,decoration
需要postaction
指定之内。在使用(例如,而不是)时postaction
将postaction
应用于轴需要使用(类似于axis lines=left
axis lines=middle
every path/.style
如何在 PGFplots 中指定轴的名称路径)。为了避免这种情况下的无限递归,您需要postaction
在第一次执行后清除。这可以使用nomorepostaction
中描述的键来完成对 TikZ 中的每个路径应用后动作。
这是使用以下方法生成的轴
\begin{axis}[
axis lines=middle,
axis line style={my axis}
]
\addplot coordinates {(-0.1,-0.2) (1.2,1.2)};
\end{axis}
完整代码如下:
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows, decorations.markings}
\begin{document}
\begin{tikzpicture}
\makeatletter
\tikzset{
nomorepostaction/.code=\makeatletter\let\tikz@postactions\pgfutil@empty, % From https://tex.stackexchange.com/questions/3184/applying-a-postaction-to-every-path-in-tikz/5354#5354
my axis/.style={
postaction={
decoration={
markings,
mark=at position 1 with {
\arrow[ultra thick]{latex}
}
},
decorate,
nomorepostaction
},
thin,
-, % switch off other arrow tips
every path/.append style=my axis % this is necessary so it works both with "axis lines=left" and "axis lines=middle"
}
}
\makeatother
\begin{axis}[
axis lines=middle,
axis line style={my axis}
]
\addplot coordinates {(-0.1,-0.2) (1.2,1.2)};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
我尝试了这个解决方案,我认为它对我来说更好。我编辑了 latex 箭头的定义,以便您可以直接指定尖端长度或使用默认值 (8pt)。因此,箭头大小现在不再依赖于线宽。显然,您可以在普通 TikZ 中使用相同的解决方案。
\documentclass{standalone}
\usepackage{pgfplots}
\pgfarrowsdeclare{mylatex'}{mylatex'}
{
\newdimen\len
\len=\pgfgetarrowoptions{mylatex'}
\pgfarrowsleftextend{-0.4\len}
\pgfarrowsrightextend{0.6\len}
}
{
\newdimen\len
\len=\pgfgetarrowoptions{mylatex'}
\pgfpathmoveto{\pgfqpoint{0.6\len}{0\len}}
\pgfpathcurveto
{\pgfqpoint{0.35\len}{0.05\len}}
{\pgfqpoint{-0.1\len}{0.15\len}}
{\pgfqpoint{-0.4\len}{0.375\len}}
\pgfpathcurveto
{\pgfqpoint{-0.15\len}{0.1\len}}
{\pgfqpoint{-0.15\len}{-0.1\len}}
{\pgfqpoint{-0.4\len}{-0.375\len}}
\pgfpathcurveto
{\pgfqpoint{-0.1\len}{-0.15\len}}
{\pgfqpoint{0.35\len}{-0.05\len}}
{\pgfqpoint{0.6\len}{0\len}}
\pgfusepathqfill
}
\pgfsetarrowoptions{mylatex'}{8pt}
\pgfkeys{/tiplen/.default=8pt, /tiplen/.code={\pgfsetarrowoptions{mylatex'}{#1}}}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=left, axis line style={-mylatex'}]
\end{axis}
\end{tikzpicture}
\begin{tikzpicture}
\begin{axis}[axis lines=middle, axis line style={-mylatex', /tiplen=4pt}]
\addplot [only marks] coordinates {(0,0) (0.5,0.5)};
\draw [-mylatex', /tiplen=1cm] (axis cs: 0.1,0.1) -- (axis cs: 0.4,0.4);
\end{tikzpicture}
\end{document}
答案3
TikZ 3.0.0 或更高版本引入了 arrows.meta,允许对箭头进行大量操作。如果您愿意稍微改变箭头样式,则可以使用 arrows.meta 获得更简单的代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=center, axis line style={-{Stealth[scale=3]}}]
\end{axis}
\end{tikzpicture}
\end{document}
输出结果如下:
注意:Stealth 是 pgfplots 中与默认轴箭头最接近的箭头,latex'。不幸的是,旧 latex' 还没有 arrows.meta 版本。Latex 也是一个不错的选择。
注 2:有关您可以操作的内容的详细信息,请参阅TikZ 手册第 16 章。