使用 pgfplots/gnuplot 绘制平滑曲面图

使用 pgfplots/gnuplot 绘制平滑曲面图

我想用 pgf-plots 和 gnuplot 创建平滑曲面图。以下代码生成一个图形,但我需要沿 y 方向的更多网格点。我该如何实现?

增加样本在这里不起作用。结果变得更糟...

提前致谢

\documentclass{scrartcl}
\usepackage{tikz}
\usepackage{pgfplots}
\pgfplotsset{compat=newest}
\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[
        width=0.9\textwidth,
        3d box,
        view={20}{25},
        plot box ratio=3 10 5,  
        ylabel={y},
        xlabel={x},     
        ]
\addplot3[raw gnuplot,   
        surf,
        %empty line = jump,
        samples=100,
        ] 
gnuplot[surf,
    mesh/check=false,
    ]{
    n=1e-5;
    b=100;
    h=10;
    p=-0.0001;
    K=((16*b**2)/(n*pi**3))*(-p);
Sum(i,x,y)=K*(((-1)**(0.5*((2*i-1)-1)))*(1-((cosh(((2*i-1)*pi*x)/(2*b)))/(cosh(((2*i-1)*pi*h)/(2*b)))))*((cos(((2*i-1)*pi*y)/(2*b)))/((2*i-1)**3)));
    u(i,x,y)=(i==0)?0:(u(i-1,x,y)+Sum(i,x,y));
    splot [-h:h] [-b:b] u(25,x,y)/u(25,0,0);
    };
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}

答案1

该问题是由于 pgfplots 没有在一个地方正确尊重“原始 gnuplot”选项而引起的:它使用自己的键samplessamples y确定输入矩阵大小,但没有将它们传达给 gnuplot。

pgfplots 的开发者版本现在修复了此行为的一个错误。在此版本稳定之前,我可以为您提供一个(非常简单的)解决方法(见下文)。

但是,您仍然需要将样本计数传达给 gnuplot(在这种情况下raw gnuplot,pgfplots 假定您承担全部责任)。

这两件事都可以用以下方法实现


\addplot3[raw gnuplot,   
        surf,
        %empty line = jump,
                samples=25,    %---
        samples y=50,  %---
        ] 
gnuplot[surf,
    %mesh/check=false,
    ]{
    n=1e-5;
    b=100;
    h=10;
    p=-0.0001;
    set samples 25,50;    %---
    set isosamples 25,50; %---
    K=((16*b**2)/(n*pi**3))*(-p);
Sum(i,x,y)=K*(((-1)**(0.5*((2*i-1)-1)))*(1-((cosh(((2*i-1)*pi*x)/(2*b)))/(cosh(((2*i-1)*pi*h)/(2*b)))))*((cos(((2*i-1)*pi*y)/(2*b)))/((2*i-1)**3)));
    u(i,x,y)=(i==0)?0:(u(i-1,x,y)+Sum(i,x,y));
    splot [-h:h] [-b:b] u(25,x,y)/u(25,0,0);
    };

(pgfplots) 键samples=<x>必须与 的第一个参数匹配set isosamples=<x>, <y> ,并且 (pgfplots) 键samples y=<y>必须与 的第二个参数匹配。老实说,我不知道如何组合 gnuplot 选项set samplesset isosamples- 我想set samples这里没有必要。这应该(通常)可以解决这个错误。

我强烈建议取消注释mesh/check=false(这表明 pgfplots 无法读取矩阵结构)。

相关内容