使用一些保存的数据,我使用(数据文件可以从文本文件其中第一列是 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
路径指令即可满足要求(比较手册中的区域图部分)。对于三维图,您需要在输入文件中自行执行此操作。
任何自动化解决方案都将是功能请求。