设置样本参数后,为什么 gnuplot 图相对于背景 TikZ 网格未对齐?

设置样本参数后,为什么 gnuplot 图相对于背景 TikZ 网格未对齐?

为了运行此代码,您需要安装gnuplot。此外,您必须让您的编辑器/工作流程确保选项--shell-escape已传递给 pdflatex,以便 TikZ 可以调用gnuplot

这是一个最小(非)工作示例:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \draw[<->] (0,5) node[left] {$x$} -- (0,0) --  (5,0) node[below] {$r$};

        \draw[thick, blue, domain=-5:5, range=0:5, samples = 50, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5, samples = 50, smooth] plot[id=s2] function{sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
    \end{tikzpicture}
\end{document}

请注意,坐标轴(由绘制\draw[<->] (0,5) node[left] {$x$} -- (0,0) -- (5,0) node[below] {$r$};)是在标准 TikZ“背景网格”上绘制的。运行代码,您会看到平方根的两个分支不是从同一位置开始的(应该从(0,1)开始),所以我说它们相对于背景 TikZ 网格未对齐(它们的(0,1)与背景网格的(0,1)不一样)。

在此处输入图片描述

但是,如果我删除样本参数,它们就会相对于背景网格正确对齐。我不喜欢较粗的曲线,因为它不能正确显示 (1, 0) 处的交点。

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \draw[<->] (0,5) node[left] {$x$} -- (0,0) --  (5,0) node[below] {$r$};

        \draw[thick, blue, domain=-5:5, range=0:5, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5, smooth] plot[id=s2] function{sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
    \end{tikzpicture}
\end{document}

在此处输入图片描述

我怎样才能得到平滑的曲线以及正确的对齐方式?pgfplots如果我能弄清楚如何将生成的图pgfplots与背景 TikZ 图片对齐(因此,这也是我放入标签的原因pgfplots),我愿意使用。这不是我运气好的事情,但gnuplot在这方面已经解决了问题(除了当前问题)。

答案1

与图表相比,背景没有错位。相反,样本没有捕捉到点 $r = 0$。为了绕过这个问题,最好手动指定应该在哪里采样,就像这样(请注意如何使用\foreach(即...)符号指定样本点:

\documentclass{standalone}

\usepackage{tikz}

\begin{document}
    \begin{tikzpicture}
        \draw[<->] (0,5) node[left] {$x$} -- (0,0) --  (5,0) node[below] {$r$};

        \draw[thick, blue, domain=-5:5, samples at = {-5,4.95,...,1}, smooth] plot[id=s1] function{-1*sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5, samples at = {-5,4.95,...,5}, smooth] plot[id=s2] function{sqrt(x) + 1};
        \draw[thick, blue, domain=-5:5] plot[id=s3] function{0};
    \end{tikzpicture}
\end{document}

但是,上面的代码不起作用。最后,我只好使用pgfplots,效果很好:

\documentclass{standalone}

\usepackage{tikz}
\usepackage{pgfplots}
% compat=1.11 for implicit pgfplots coordinate matching with TikZ background coords
\pgfplotsset{compat=1.11}

\begin{document}
    \begin{tikzpicture}
        \begin{axis}[axis lines = none, axis equal]
            \draw[<->] (0,2) node[left] {$x$} -- (0,0) --  (1.5,0) node[below] {$r$};

            \addplot[thick, blue, samples at = {0,0.05,...,1.1}] {sqrt(x) + 1};
            \addplot[thick, blue, samples at = {0,0.05,...,1}] {-1*sqrt(x) + 1};
            \addplot[thick, blue, domain=-1:1.1] {0};
        \end{axis}
    \end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容