代码:
\begin{tikzpicture}
\begin{axis}
[
xlabel=$x$, ylabel=$y$,
xmin=-2, xmax=2, ymin=-4, ymax=4,
domain=-2:2,
restrict y to domain=-4:4,
grid=both,
clip=true,
axis lines=middle,
enlarge y limits={rel=0.1},
enlarge x limits={rel=0.1}
]
\addplot [mark=none, thick, smooth] {x} node [pos=1, above] {$x$};
\addplot [mark=none, thick, smooth] {x^3} node [pos=1, above] {$x^3$};
\addplot [mark=none, thick, smooth] {x^5} node [pos=1, above] {$x^5$};
\end{axis}
\end{tikzpicture}
输出
问题
为什么 y 轴上的绘图被
x^5
修剪了这么多?我希望所有函数在 y 轴上都可见,范围从 -4 到 +4。我向函数添加标签的方式可以吗?实际上,是否有“首选方法”来做到这一点?
最后,我能以某种方式设置网格,以便像在 x 轴上一样,每个整数都有一条网格线吗?(现在,我只看到 -4、-2、+2、+4 处的水平线。抱歉,我不知道如何更好地表达这一点,我不是以英语为母语的人;希望你能理解)
提前感谢您的帮助,我们将不胜感激!
答案1
基本上,问题
pgfplots
在于默认情况下,与 结合,只使用 25 个样本进行绘图restrict y to domain
。使用 时domain=-2:2
,函数在 x=-2、x=-1.833、x=1.667 等处计算。(步长为 4/24=1/6。)因此,您会在 x=1.667 处得到一个点,得到 y=2.16,在 x=1.333 处得到下一个点,得到 y=4.21。但由于restrict y to domain=-4:4
,所有高于 4 的 y 值都被 nan 替换,因此绘图在点 (1.6667, 2.16) 处结束。更高的样本数量可以帮助解决这个问题。我认为这是一个非常好的方法。
但请考虑一件事:如果删除
enlarge y limits={rel=0.1}
,则带有函数标签的节点将从视线中移除,因为它们位于轴边界之外,并且clip=true
(这是默认行为)。因此,如果您不想要enlarge
限制,则需要clip=false
。如果您只想要一条额外的网格线,您可以添加一个小刻度,如
minor tick num=1
Zarko 的答案所示。如果您希望每个整数都有一个数字,您可以设置ytick distance=1
。
\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
xlabel=$x$, ylabel=$y$,
xmin=-2, xmax=2, ymin=-4, ymax=4,
domain=-2:2,
restrict y to domain=-4:4,
grid=both,
clip=true,
axis lines=middle,
enlarge y limits={rel=0.1},
enlarge x limits={rel=0.1},
ytick distance=1
]
\addplot [mark=none, thick, samples=2] {x} node [above] {$x$};
\addplot [mark=none, thick, samples=300] {x^3} node [above] {$x^3$};
\addplot [mark=none, thick, samples=400] {x^5} node [above] {$x^5$};
\end{axis}
\end{tikzpicture}
\end{document}
答案2
像这样?
\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
xlabel=$x$, ylabel=$y$,
xmin=-2.5, xmax=2.5, ymin=-5, ymax=5, % changed
domain=-2:2,
% restrict y to domain=-4:4,
grid=both,
minor tick num=1,
clip=true,
axis lines=middle,
% enlarge y limits={0.2},
% enlarge x limits={0.2}
legend pos=south east,
]
\addplot +[mark=none, thick, smooth] {x} ;
\addplot +[mark=none, thick, smooth] {x^3} ;
\addplot +[mark=none, thick, smooth] {x^5} ;
\legend{$x$, $x^3$, $x^5$}
\end{axis}
\end{tikzpicture}
\end{document}
- 这是限制,因为
restrict y to domain=-4:4,
- 标签:您介意勾选标签吗?
- 您是否希望在每个单位上都有刻度标签,即: y 轴为 -4、-3、...、4?
编辑:在曲线上添加标签并不那么简单,更简单的是添加图例,正如现在纠正上面的内容姆韦。
附录:
如果使用图例不是令人满意的解决方案,那么作为解决方案的补充Torbjørn T.,其中不需要确定曲线末端的标签位置...借助intersection
库可以按如下方式完成:
\documentclass[margin=3mm]{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.15}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
\begin{axis}
[
xlabel=$x$, ylabel=$y$,
xmin=-2.5, xmax=2.5, ymin=-5, ymax=5, % changed
domain=-2:2,
grid=both,
minor tick num=1,
axis lines=middle,
smooth,
no marks,
every axis plot post/.append style={thick}
]
\addplot {x} node[text=black, right] {$x$};
\addplot + [name path=A] {x^3};
\addplot + [name path=B] {x^5};
%
\path[name path=C] (0,5) -- (2,5);
\path[name intersections={of=A and C, by={x3}}]
node[below right] at (x3) {$x^3$};
\path[name intersections={of=B and C, by={x5}}]
node[below left] at (x5) {$x^5$};
\end{axis}
\end{tikzpicture}
\end{document}