修改函数及其反函数图像的一些特征

修改函数及其反函数图像的一些特征

以下代码是通过编译pgfplots来绘制指数函数及其反函数的图形。我对代码有一些疑问,我想修改图形的一些功能。

如何pgfplots指示绘制相隔 5 个单位的网格线?我猜,为什么指数函数的图形位于垂直线 x=-5 和 x=3.8 之间?为什么直线 y=x 的图形位于垂直线 x=-5 和 x=5 之间?为什么对数函数的标签会干扰对数函数的图形?

我希望轴上的数字为白色节点 - 这样网格线就不会覆盖它们。网格线画得太高,太靠右了。我希望网格线画得短一点,或者轴画得长一点。指数函数(即图形)的范围应为 -6 到 4,线性函数的范围应为 -6 到 16。

\documentclass[10pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections,quotes,decorations.markings}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}



\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=both,
          xmax=18,ymax=17,
          axis lines=middle,
          restrict y to domain=-7:17,
          enlargelimits]
\addplot[dashed]{x} node[fill=white, above, right]{$y=x$};
\addplot[green]  {pow(2,x)} node[fill=white, above, right]{$y=2^x$};
\addplot[blue,domain=1/2^6:16,samples=100]  {log2(x)} node[fill=white, below] {$y=\log_2(x)$};
\end{axis}
\end{tikzpicture}

\end{document}

答案1

我猜测刻度/网格线之间的距离是根据轴的范围和宽度/高度通过某种算法计算出来的,尽管我不知道这一点。

默认域是-5:5,因此除非另有说明(如您在绘图中所做的那样log2(x)),否则函数将在该范围内绘制。为什么是该范围?为什么不呢?可能是一个任意选择,在大多数情况下都可以正常工作。我想只有开发人员 Christian Feuersänger 才能确切知道。

由于 key,指数函数在 x=4 附近停止restrict y to domain=-7:17,这会删除所有 y 值高于 17 的点。线条停止得稍早一些的原因是,pgfplots当然,它不会绘制无限多个点。默认值是使用 25 个样本,使用 -5 和 5 之间的 25 个线性间隔点,您会在 3.75 处得到一个 x 值,在 4.17 处得到下一个 x 值。后者给出的 y 值为 17.36,因此被删除。

由于 ,标签会遮住部分线条fill=white。默认情况下,节点形状为矩形,从文本到节点边缘留有一定空间。不会自动检测与其他线条的冲突。解决此问题的一种方法是将节点向下移动一点,例如使用 ,而below=5pt不仅仅是below

网格线不会绘制在刻度线上方,但如果您想要白色填充,请添加ticklabel style={fill=white}axis选项中。

要将轴线延伸到网格之外并在两端添加箭头,您可以添加axis line style={shorten >=-0.5cm,shorten <=-0.5cm,latex-latex}axis选项中。这里latex是箭头的名称,您可以使用 TikZ/PGF 中可用的任何箭头。

将相同的内容添加到\addploty=x 线的选项中,这里也会出现箭头。

\documentclass[10pt]{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,positioning,intersections,quotes,decorations.markings}
\usepackage{pgfplots}
\pgfplotsset{compat=1.11}
\begin{document}
\begin{tikzpicture}
\begin{axis}[grid=both,
          xmax=18,ymax=17,
          axis lines=middle,
          restrict y to domain=-7:17,
          enlargelimits,
          axis line style={shorten >=-0.5cm,shorten <=-0.5cm,latex-latex},
          ticklabel style={fill=white}]
\addplot[dashed,domain=-6:16,latex-latex] {x} node[fill=white, above, right]{$y=x$};
\addplot[green,domain=-6:4]  {pow(2,x)} node[fill=white, above, right]{$y=2^x$};
\addplot[blue,domain=1/2^6:16,samples=100]  {log2(x)} node[fill=white, below=5pt] {$y=\log_2(x)$};
\end{axis}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容