![修改函数及其反函数图像的一些特征](https://linux22.com/image/297833/%E4%BF%AE%E6%94%B9%E5%87%BD%E6%95%B0%E5%8F%8A%E5%85%B6%E5%8F%8D%E5%87%BD%E6%95%B0%E5%9B%BE%E5%83%8F%E7%9A%84%E4%B8%80%E4%BA%9B%E7%89%B9%E5%BE%81.png)
以下代码是通过编译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 中可用的任何箭头。
将相同的内容添加到\addplot
y=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}