如何在不使用 gnuplot 的情况下在 pgfplots 中绘制隐式函数?

如何在不使用 gnuplot 的情况下在 pgfplots 中绘制隐式函数?

我一直在尝试仅使用 pgfplots 内部工具来绘制几个非常简单的隐式线性函数。

这是我的 MWE:

\documentclass{article}
\usepackage{pgfplots}
\usepgfplotslibrary{external}
\tikzexternalize
\pgfplotsset{compat=newest}
\usepackage{amsmath}
\usepackage[T1]{fontenc}

\begin{document}

\begin{tikzpicture}

\begin{axis}
\addplot[color=red]{3*x + 2*y - 2};
\end{axis}

\end{tikzpicture}

\end{document}

当我运行这个时,出现这个错误:

! Package pgfplots Error: Sorry, you can't use 'y' in this context. PGFPlots ex
pected to sample a line, not a mesh. Please use the [mesh] option combined with
[samples y>0] and [domain y!=0:0] to indicate a twodimensional input domain.
See the pgfplots package documentation for explanation.

这个特定函数可以显式化,但我仍然想知道是否可以使用纯绘制隐式函数pgfplots。到目前为止,我见过的所有例子都调用gnuplot

答案1

实际上,如果不能使用 PGFPlots,也可以使用 LaTeX 绘制隐式函数……但在这种情况下,你需要作弊。Dan Luecking 在其mfpic包,它是 MetaPost(或 METAFONT)的 (La)TeX 接口,一个名为

\levelcurve[spec]{seed,step} {inequality}

在某些条件下,这种方法效果很好,文档,第 44-45 页:

此图形宏生成某个函数的水平曲线F(x;y)。要使其正常工作,对参数有三个要求。首先,为了获得满足的曲线F(x;y) =C{inequality}必须是{F(x,y) > C}{F(x,y) < C}。其次,水平曲线必须围绕参数给出的点seed,第三,不等式必须在此种子点处成立。

该命令的工作方式是从右向左搜索,seed直到遇到等高线的第一个点。然后,它会尝试在等高线中找到一个附近的点,并将其与第一个点连接起来,然后继续执行类似操作,直到发现它已返回到起点附近。“等高线附近的点”的含义是等高线与step以前找到的点为中心的半径圆的交点。如果不等式定义的区域超出了图片的边界(由 \mfpic 命令设置),则该区域将被截断,并且生成的曲线将沿着图片的边界延伸。

我已经用过这个宏来回答 类似的问题,在这种情况下效果很好。我刚刚将它应用到您的简单示例中:

\documentclass{standalone}
\usepackage{amsmath}
\usepackage[metapost]{mfpic}
  \setlength{\mfpicunit}{1cm}
  \opengraphsfile{\jobname}
\begin{document}
\begin{mfpic}[2]{-0.5}{2}{-0.5}{2}
  \levelcurve[p]{(0, 0), 0.01}{3*x + 2*y - 2 < 0}
  \doaxes{xy}
  \tlpointsep{2bp}
  \tlabels{[tr](0, 0){$O$} [tr](0.667, 0){$\dfrac{2}{3}$} [cr](0, 1){$1$} 
    [tc](\xmax, 0){$x$} [cr](0, \ymax){$y$}}
\end{mfpic}
\closegraphsfile
\end{document}

先用 LaTeX 排版,再用 MetaPost 排版,最后再用 LaTeX 排版。结果是:

在此处输入图片描述

(正如文档中指出的,图形的边框已被用来关闭线条,这是预期的结果。)

不过,正如 Paul Gessler 所注意到的,一个外部程序在后台运行,即 MetaPost(它是尽可能接近 LaTeX 的外部程序)。

答案2

不,目前还无法使用 来绘制隐函数pgfplots

gnuplot此时,这些类型的图需要使用(或其他外部计算引擎)。即使是等高线图也pgfplots需要gnuplot或充分准备的数据文件。

相关内容