执行

执行

使用一些保存的数据,我使用(数据文件可以从文本文件其中第一列是 x ,在每次迭代中,我根据第一列绘制其他列)

    \documentclass{article}
\usepackage{pgfplots,pgfplotstable}

\pgfplotstableread{pX.txt}\datatablePX%          

\begin{document}


\begin{tikzpicture}
\begin{axis}[
    zmin=10^5,
    area plot/.style={
        fill opacity=0.75,
        draw=black!50!black,
        fill=blue!50,
        mark=none,
    },
    xlabel={$x[m]$},ylabel={Time},zlabel={p[bar]}
]

\pgfplotsinvokeforeach{120,119,...,1}{
  \addplot3 [area plot]  table [x index=0, y expr=#1, z index=#1] {\datatablePX};
}


\end{axis}
\end{tikzpicture}

\end{document}

绘制一些 3D 数据,我希望填充曲线下方的区域。但是,正如下图所示,填充了错误的区域。

在此处输入图片描述

它正在将区域填充到起始值和结束值之间的线图。为什么不简单地根据 x 轴进行填充?

答案1

您需要手动循环路径,这绝对不是最好的解决方案,但它确实有效。所以我正在执行以下操作:

\addplot3[area plot] table[x index=0,y expr=#1,z index=#1] {\datatablePX}
-- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},#1,\pgfkeysvalueof{/pgfplots/zmin})
-- (axis cs:\pgfkeysvalueof{/pgfplots/xmin},#1,\pgfkeysvalueof{/pgfplots/zmin})
-- cycle;

这看起来很糟糕enlargelimits=true,所以最好手动或使用来设置您的限制enlargelimits=false

如果您不想将其用作zmin下填充边界,您可以指定自己的密钥,例如,zcycle并使用分配给此密钥的值。有关详细信息,请参阅 MWE。

执行

我还对您的代码进行了一些调整,使其具有更多的可读轴标签。使用pX.txt,由OP上传。我没有绘制所有值以获得更好的性能。

\documentclass[tikz]{standalone}
\usepackage{pgfplots,pgfplotstable}
\tikzset{
    /pgfplots/zcycle/.initial=,
}
\pgfplotstableread{pX.txt}\datatablePX%          
\begin{document}
\begin{tikzpicture}
    \begin{axis}[
            zmin=0.95*10^5,
        zcycle=10^5,
            area plot/.style={
                fill opacity=0.75,
                draw=black!50!black,
                fill=blue!50,
                mark=none,
            },
            xlabel={Distance $x$ [m]},
            ylabel={Time $t$ [s]},
            zlabel={Pressure $p$ [bar]}
        ]
        \pgfplotsinvokeforeach{120,80,...,1}{
            \addplot3[area plot] table[x index=0,y expr=#1,z index=#1] {\datatablePX}
            -- (axis cs:\pgfkeysvalueof{/pgfplots/xmax},#1,\pgfkeysvalueof{/pgfplots/zcycle})
            -- (axis cs:\pgfkeysvalueof{/pgfplots/xmin},#1,\pgfkeysvalueof{/pgfplots/zcycle})
            -- cycle;
        }
    \end{axis}
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

答案2

您的预期用例需要修改输入数据。

为了找到“合适”的修改,您需要了解这里发生了什么。在选项列表中添加“填充”意味着路径将被关闭,并且封闭的段将被填充。关闭路径意味着连接到最近的“移动到”路径段,其中“移动到”表示“当前段的起点”,“连接”表示用直线连接。这就是您所看到的:对于每个段,最后一个点与第一个点相连以关闭路径。

因此,您可以向数据的每条扫描线添加额外的坐标 - 这些线确保“最后一个点”等于该线段的第一个点。

对于二维图,pgfplots有同样的要求,并且使用\closedcycle路径指令即可满足要求(比较手册中的区域图部分)。对于三维图,您需要在输入文件中自行执行此操作。

任何自动化解决方案都将是功能请求。

相关内容