填充两个 gnuplot 轮廓之间的区域

填充两个 gnuplot 轮廓之间的区域

这是我第一次使用 latex 图。我想像填充两个多项式一样填充两条轮廓线之间的小区域,但我认为轮廓线由 gnuplot 生成存在一些问题。我还尝试写出两条曲线的显式表达式以避免使用 gnuplot,但(我认为对于舍入问题)结果并不令人满意。

\documentclass{standalone}
\usepackage{pgfplots}
\pgfplotsset{compat=1.10}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture} 
    \begin{axis}
    [
    view={0}{90}
    ]
    \addplot3[name path= j, domain=0:1,
    y domain=0:1,
    contour gnuplot={ draw color = blue, label distance=250pt, levels={0.5}}
    ]
    {(x^(1/3)) *(y^(2/3)))};
    \addplot3[name path= h, domain=0:1,
    y domain=0:1,
    contour gnuplot={ draw color = red, label distance=250pt, levels={0.5}}
    ]
    {((1-x)^(1/2)) *((1-y)^(1/2)))};
    \addplot [name path=f,domain=0:1,blue] {x^2};
    \addplot[name path=g,domain=0:1,blue] {x^3};
    \
    \addplot [
   thick,
   color=blue,
   fill=blue, 
   fill opacity=0.05
   ]
   fill between[
   of=f and g, 
   %if i replace f and g with h and j the code doesn't work
   soft clip={domain=0:1},
   ];
     \end{axis}
    \end{tikzpicture}  
    \end{document}

我的代码的输出

请注意,要运行此 tex,您的计算机上需要有 gnuplot。我所做的可能不是实现我需要的最佳方式,但正如我之前所说,我没有太多经验。

答案1

欢迎来到 TeX.SE!Paul Gaborit 绝对是对的。在这种情况下,按照他的建议做并不太难:推导出路径的明确表达式。(我还改变了我在第二个图中引用路径的方式,再次遵循了 Paul 的建议。)

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16}
\usepgfplotslibrary{fillbetween}

\begin{document}
You are interested in two contours,
\[ x\,y^2~=~0.5^3\quad\text{and}\quad (1-x)(1-y)~=~0.5^2\;.\]
This means you want to plot
\[ y~=~\sqrt{\frac{0.5^3}{x}}\quad\text{and}\quad
y~=~1+\frac{0.5^2}{1-x}\;.\]
This can be done without gnuplots.

\begin{tikzpicture} 
    \begin{axis}
    [
    view={0}{90}
    ]
    \addplot[name path=j, domain=0.05:1,thick,blue,
    y domain=0:1,]
    {sqrt(0.5^3/x)};
    \addplot[name path=h, domain=0:0.75,thick,red,
    y domain=0:1]
    {1+(0.5^2/(x-1))};
    \addplot [name path=f,save path=\pathC,domain=0:1,blue] {x^2};
    \addplot[name path=g,domain=0:1,blue] {x^3};


    \addplot [
   thick,
   color=blue,
   fill=blue, 
   fill opacity=0.05
   ]
   fill between[
   %of=f and g, 
   of=h and j,
   soft clip={domain=0:1},
   ];
     \end{axis}
    \end{tikzpicture}  

I am wondering if you want to plot the region between two intersection segments,
though. 


\begin{tikzpicture} 
    \begin{axis}
    [
    view={0}{90}
    ]
    \addplot[name path=j, domain=0.05:1,thick,blue,
    y domain=0:1,]
    {sqrt(0.5^3/x)};
    \addplot[name path=h, domain=0:0.75,thick,red,
    y domain=0:1]
    {1+(0.5^2/(x-1))};
    \addplot [name path=f,save path=\pathC,domain=0:1,blue] {x^2};
    \addplot[name path=g,domain=0:1,blue] {x^3};
\path[%draw=red,thick,
fill=blue!20,intersection segments={of=j and h,sequence={L2--R2[reverse]}}];

\end{axis}

\end{tikzpicture}  

\end{document}

从技术上讲,等高线图是 3D 图,这就是它们带有的原因\addplot3。3D 图不是单一的 Ti正如 Paul Garborit 指出的那样,Z 路径不能用于交叉点。不过,您可以查看轮廓图魔法是如何工作的。在当前的在 pgfplots 手册中,您可以阅读 gnuplot 的调用方式。您可以在那里看到创建了一些数据文件。您很可能可以使用这些数据绘制一些一维路径,这些路径随后可用于相交或填充。但是,在这种情况下,这不是必需的。

相关内容