【问题标题】:gnuplot connects endpoint of datagnuplot 连接数据的端点
【发布时间】:2012-08-13 04:24:56
【问题描述】:

我正在使用 gnuplot “splot” 函数绘制 3d 曲面。数据以 (x,y,z) 格式写入文本文件的 3 列中。当我从文件中绘制数据时, splot 连接数据的端点。表面本身是正确的,但在表面底部还有一组额外的不需要的平行线(形成 xy 平面)。因此,对于每个 x,它都绘制了一个对称衰减为零的函数,但是 +\infty 和 -\infty 也连接在一起!这使得图表下方出现了一个不需要的 x 轴。

我试图将边界设置为零,玩数据格式等。没有运气!

【问题讨论】:

  • 您确定数据集的开头或结尾没有多余的点吗?我以前也遇到过类似的效果。如果不是这种情况,您能否发布一个重现效果的数据/代码的最小示例?另外,您使用的是哪个版本的 gnuplot/平台
  • 您似乎想要绘制一个曲面。你的数据是用 gnuplot 的griddata 格式写的吗?如果你set dgrid3d 会发生什么?表面(大约)是否正确?
  • @mgilson。是的,我正在绘制一个曲面。正如我所提到的,数据采用 (x,y,z) 格式,x-y-z 之间有空格;每个三倍在一行中。但是所有这些三元组都是一个接一个。我没有在“块”之间放置一个空行。我不确定是不是因为这个。是的,当我尝试“设置 dgrid3d”时,表面是正确的,但太粗糙了。
  • 顺便说一句,我已经从 matlab 导出数据。如果您有一种经过验证的方法可以从适合 gnuplot 的 matlab 导出 3d 数据,我会提出建议。在 2d 中,我使用“dmwrite”创建对 (x,y) 没有问题。
  • @andyras。我正在使用 4.4 版本的补丁级别 2。数据文件很好(除了,也许,正如我上面提到的,数据块之间没有空行)。不幸的是,gnuplot 手册写得不好。几乎没有例子,很多术语没有定义。我只有一个 (x,y,z) 的 MNP 矩阵,并希望软件在每个坐标中放置一个点。不知道为什么这么难!

标签: gnuplot


【解决方案1】:

您的问题是您的数据不是 'grid data' 格式。 Gnuplot 看到数据并将其绘制为 lines 而不是将其绘制为表面。不幸的是,我不知道 matlab,但这里有一些应该可以工作的伪代码(尽管可能不是写入数据的最有效方式):

 do iy=1 to ny
    do ix=1 to nx
       write gridx(ix,iy), gridy(ix,iy), data(ix,iy)
    enddo
    write blank line
 enddo

当然,如果您的网格可以表示为一维数组(而不是上面的二维),您可以执行以下操作(使用适当的循环):

 write gridx(ix), gridy(iy), data(ix,iy)

或者,您可以在 gnuplot 中使用 dgrid3ddgrid3d 将非网格数据插入到网格数据中。默认情况下,它会插入一个 10x10 的网格,正如您所指出的,它非常粗糙。您可以将其增加set dgrid3d NX,NY,其中NXNY 分别是x 和y 轴上的点数。

最后,如果您不想弄乱您的数据文件,您可能需要考虑使用 gnuplot FAQ 中的以下 awk 脚本(第 3.9 节):

#addblanks.awk
/^[[:blank:]]*#/ {next} # ignore comments (lines starting with #)
NF < 3 {next} # ignore lines which don't have at least 3 columns
$1 != prev {printf "\n"; prev=$1} # print blank line
{print} # print the line

现在绘制你的表面:

set surface
splot "<awk -f addblanks.awk yourdatafile.dat" 

【讨论】:

  • 甜蜜! addblanks.awk 是我要找的!不知道awk这么简单!
  • @eli -- 我个人看了awk 代码,感觉就像有人刚刚开始用篮球捣碎我的键盘......它足够短,可以阅读和理解(最终 - 谢天谢地评论很好)。 awk 非常强大(尽管语法对我来说有点混乱)。无论如何,祝你好运。如果这解决了您的问题,请随时将其标记为已接受(单击答案旁边的小复选标记)。这样其他人就不会花时间试图回答您已解决的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
相关资源
最近更新 更多