【问题标题】:Gnuplot filledcurves for closed lines doesn't work properly封闭线的 Gnuplot 填充曲线无法正常工作
【发布时间】:2015-10-09 08:03:17
【问题描述】:

我对 gnuplot 填充曲线有疑问。我用这段代码计算了一些数据来绘制图片:

plot 'cont.dat' u 1:2 w filledcurves closed lc rgb "#ADFF2F"  title "DF"
'cont2.dat' u 1:2 w filledcurve lc rgb "#CD5C5C" title "DA",\
'cont3.dat' u 1:2 w filledcurve lc rgb "#4682B4" title "(DF+DA)/2",\
'cont3.dat' u 1:2 w l lw 3 lc rgb "#4682B4" notitle ,\
'cont.dat' u 1:2 w l lw 3 lc rgb "#ADFF2F" notitle,\
'cont2.dat' u 1:2 w l lw 3 lc rgb "#CD5C5C" notitle

这些数据一切正常:

但是当我计算另一个案例时。尝试使用相同的代码进行绘制,我收到以下错误结果:

如何更改我的代码以完全填充这些区域?我不需要这个透明的“洞”。

UPD:在这里您可以找到绘制错误的绿色区域数据: https://www.dropbox.com/s/xzheur2mx9h902f/cont.dat?dl=0 无论是绘制三条曲线还是绘制一条曲线,每条曲线的结果都相同。

我在 Windows 上使用了 GNUplot 4.6

【问题讨论】:

  • 请显示 一个 错误曲线的数据,以便我们尝试重现此问题。您使用哪个 gnuplot 版本?
  • 问题是,您要绘制的文件具有不同的数据块(部分由新行分隔)。这些被视为单独的曲线,每条曲线都没有一个填充区域。当您使用plot for [i=0:4] 'cont.dat' using 1:2 every :::i::i with lines lw 3 绘制数据时,您会看到这一点。不幸的是,删除这些新行并不能解决这个问题,因为这些行的顺序并不像您需要的那样。但是,我不知道当您使用 gnuplot 创建轮廓时是否出现问题,以便获得多个轮廓段而不是单个。
  • 我尝试从输入数据中删除空行,然后按第一列对其进行排序。所以我想现在 GNUplot 不会像单独的曲线那样响应数据。不幸的是,现在我的情节看起来像这样link。我试图找到解决方案。但实际上我不确定这个问题是由填充程序引起的还是由以前的数据计算曲线的方法引起的。
  • 正如我告诉你的,问题是根据你之前的数据计算曲线是错误的,因为它创建了几条曲线而不是一条曲线。对于绘图线,这很好,但不适用于填充。

标签: gnuplot fill


【解决方案1】:

如 cmets 中所述,一个数据中的问题是它被分成块。但解决这个问题是不够的。让我们关注下图:

上图对应于您的原始数据。我用不同的颜色绘制了每个数据块。如果我们去掉空格,就得到了中间/蓝色的数字,所以问题还没有解决。

如果查看数据,每个数据块的第一列按箭头方向排序(上图),但数据块按相反方向排序:它们是断开的!

因此,数据块应按0-4-3-2-1(或任何循环顺序,例如3-2-1-0-4)排序。空格也应该被删除。完成此操作后,将获得底部/红色图形。

这是我用来画图的部分代码:

plot for [i=0:4] 'cont_original.dat' u 1:2 every :::i::i w filledc t 'original block '.i,\
     'cont_nospaces.dat' u 1:($2-0.2) w filledc t 'original without spaces',\
     'cont_ordered.dat'  u 1:($2-0.4) w filledc t 'ordered'

【讨论】:

  • 谢谢。现在它看起来正是我需要的。分析输入数据对我来说是很好的一课。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多