评论

评论

我想绘制一个线性函数 y=40-0.2x 和一个双曲线 y=5/x。我该怎么做?我试过了,代码来自这个文件在第 160 页,但曲线与轴不在同一页。

编辑:使用下面提到的 Tikz 方法后,我想绘制 y=5/(x-1)+1 的图表。

Microsoft Mathematics 中显示的结果是: 在此处输入图片描述

但是,使用 LaTeX,我没有得到相同的结果。我的代码是:

\documentclass[tikz,border=3mm]{standalone}
\usepackage[english,greek]{babel}
\usepackage{ucs} 
\usepackage[utf8x]{inputenc}
\begin{document}
\begin{tikzpicture}[xscale=0.08,yscale=0.09,domain=0.140:60,samples=800]
    \draw[->] (0,0) -- (65,0) node[below] {$x$};
    \draw[->] (0,0) -- (0,35) node[left] {$y$};
    \foreach \i in {10,20,...,50} {
        \draw (\i,1) -- (\i,-1) node[below] {$\i$};
    }
    \foreach \i in {5,10,...,30} {
        \draw (1,\i) -- (-1,\i) node[left] {$\i$};
    }
    \draw[green] plot (\x,{5/(\x-1)+1});
\end{tikzpicture}
\end{document}

我的错在哪里?

答案1

评论

对于这两种方法,请记住 5/x 在 0 处具有奇点。此时函数值将为无穷大,这对于 PGF 来说很难绘制,因此会引发错误:

  • ! Package PGF Math Error: You've asked me to divide `5' by `0', but I cannot divide any number by `0' (in '{5/0}').

  • ? Dimensions too large

方法 1:使用 Ti

使用 Ti 的优势Z 是,您可以轻松地将节点放置在图上。缺点是,您必须缩放 x 和 y 维度,否则绘图将有 220 厘米宽。

执行

\documentclass[tikz,border=3mm]{standalone}
\begin{document}
\begin{tikzpicture}[xscale=0.04,yscale=0.08,domain=0.125:220,samples=400]
    \draw[->] (-10,0) -- (225,0) node[below] {$x$};
    \draw[->] (0,-5) -- (0,45) node[left] {$y$};
    \foreach \i in {50,100,...,200} {
        \draw (\i,1) -- (\i,-1) node[below] {$\i$};
    }
    \foreach \i in {10,20,...,40} {
        \draw (1,\i) -- (-1,\i) node[left] {$\i$};
    }
    \draw[blue] plot (\x,{40-0.2*\x});
    \draw[red] plot (\x,{5/\x});
\end{tikzpicture}
\end{document}

输出

蒂克兹

方法 2:使用 PGFPlots

这更加优雅并且代码也更短。

执行

\documentclass[tikz,border=3mm]{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
    \begin{axis}[domain=0.125:220,samples=400]
        \addplot+[mark=none] {40-0.2*x};
        \addplot+[mark=none] {5/x};
    \end{axis}
\end{tikzpicture}

\begin{tikzpicture}
    \begin{axis}[
        domain=0.125:220,
        xmin=-10, xmax=220,
        ymin=-5, ymax=45,
        samples=400,
        axis y line=center,
        axis x line=middle,
    ]
        \addplot+[mark=none] {40-0.2*x};
        \addplot+[mark=none] {5/x};
    \end{axis}
\end{tikzpicture}
\end{document}

输出

pgfplots1 pgfplots2

方法 3:PSTricks(只是为了好玩)

使用该软件包,pst-plot您可以访问高级绘图功能。此外,PSTricks 比 Ti 快得多Z 表示绘图,因为它使用了 Postscript 语言。

执行

使用xelatex或进行编译latex -> dvips -> ps2pdf

\documentclass[pstricks,border=3mm]{standalone}
\usepackage{pst-plot}
\begin{document}
\begin{pspicture}[xAxisLabel=$x$,yAxisLabel=$y$](-0.5,0)(0.5,6.5)
\begin{psgraph}[arrows=->,Dx=50,Dy=10](0,0)(-10,-5)(220,45){8cm}{6cm}
    \psplot[plotpoints=200,linecolor=blue]{0}{220}{40 0.2 x mul sub}
    \psplot[plotpoints=200,linecolor=red]{0.125}{220}{5 x div}
\end{psgraph}
\end{pspicture}

\begin{pspicture}[xAxisLabel=$x$,yAxisLabel=$y$,xAxisLabelPos={c,-12},yAxisLabelPos={-35,c}](-1,-1)(0.5,6.5)
\begin{psgraph}[axesstyle=frame,xticksize=-5 45,yticksize=-10 220,Dx=50,Dy=10](0,0)(-10,-5)(220,45){8cm}{6cm}
    \psplot[plotpoints=200,linecolor=blue]{0}{220}{40 0.2 x mul sub}
    \psplot[plotpoints=200,linecolor=red]{0.125}{220}{5 x div}
\end{psgraph}
\end{pspicture}
\end{document}

PS1 PS2

答案2

回答编辑

您需要手动调整绘图限制。这是无法避免的,因为世界上没有绘图软件能够知道您想要什么限制。

执行

\documentclass[tikz,border=3mm]{standalone}
\usepackage[english,greek]{babel}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}[xscale=1.5,yscale=0.04,domain=1.037:4,samples=800]
    \draw[->] (0,0) -- (4.5,0) node[below] {$x$};
    \draw[->] (0,0) -- (0,135) node[left] {$y$};
    \foreach \i in {1,2,...,4} {
        \draw (\i,1) -- (\i,-1) node[below] {$\i$};
    }
    \foreach \i in {20,40,...,130} {
        \draw (0.05,\i) -- (-0.05,\i) node[left] {$\i$};
    }

    \draw[green] plot (\x,{5/(\x-1)+1});
\end{tikzpicture}

\begin{tikzpicture}
    \begin{axis}[
        domain=1.037:4,
        xmin=0, xmax=4.5,
        ymin=0, ymax=135,
        samples=800,
        axis lines=center,
    ]
        \addplot+[mark=none,color=green] {5/(x-1)+1};
    \end{axis}
\end{tikzpicture}
\end{document}

输出

蒂克兹 pgf图

答案3

只是为了和 PSTricks 一起玩。

\documentclass[preview,border=12mm,varwidth]{standalone}
\usepackage{pst-plot}

\psset{plotpoints=200,linewidth=1pt,algebraic,xAxisLabel=$x$,yAxisLabel=$y$}

\def\f{40-0.2*x}
\def\g{5/x}

\begin{document}

\begin{psgraph}[arrows=->,Dx=50,Dy=10](0,0)(-10,-5)(220,45){8cm}{6cm}
    \psplot[linecolor=blue]{0}{220}{\f}
    \psplot[linecolor=red]{0.125}{220}{\g}
\end{psgraph}

\vspace{1cm}
\psset{xAxisLabelPos={c,-12},yAxisLabelPos={-35,c}}
\begin{psgraph}[axesstyle=frame,xticksize=-5 45,yticksize=-10 220,Dx=50,Dy=10](0,0)(-10,-5)(220,45){8cm}{6cm}
    \psplot[linecolor=blue]{0}{220}{\f}
    \psplot[linecolor=red]{0.125}{220}{\g}
\end{psgraph}

\end{document}

在此处输入图片描述

相关内容