为什么 TikZ 和 pgfplots 会像这样修剪我的图表?

为什么 TikZ 和 pgfplots 会像这样修剪我的图表?

代码:

\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}

输出

plot picture

问题

  1. 为什么 y 轴上的绘图被x^5修剪了这么多?我希望所有函数在 y 轴上都可见,范围从 -4 到 +4。

  2. 我向函数添加标签的方式可以吗?实际上,是否有“首选方法”来做到这一点?

  3. 最后,我能以某种方式设置网格,以便像在 x 轴上一样,每个整数都有一条网格线吗?(现在,我只看到 -4、-2、+2、+4 处的水平线。抱歉,我不知道如何更好地表达这一点,我不是以英语为母语的人;希望你能理解)

提前感谢您的帮助,我们将不胜感激!

答案1

  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) 处结束。更高的样本数量可以帮助解决这个问题。

  2. 我认为这是一个非常好的方法。

    但请考虑一件事:如果删除enlarge y limits={rel=0.1},则带有函数标签的节点将从视线中移除,因为它们位于轴边界之外,并且clip=true(这是默认行为)。因此,如果您不想要enlarge限制,则需要clip=false

  3. 如果您只想要一条额外的网格线,您可以添加一个小刻度,如minor tick num=1Zarko 的答案所示。如果您希望每个整数都有一个数字,您可以设置ytick distance=1

output of code

\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

像这样?

enter image description here

\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}
  1. 这是限制,因为restrict y to domain=-4:4,
  2. 标签:您介意勾选标签吗?
  3. 您是否希望在每个单位上都有刻度标签,即: 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}

enter image description here

相关内容