【问题标题】:Using Gnuplot to plot point colors conditionally使用 Gnuplot 有条件地绘制点颜色
【发布时间】:2016-01-30 23:19:08
【问题描述】:

我有一个包含四列数据的文件。我只使用前三个来绘制 3D 图,现在不需要第四个。

我想知道如果满足某些条件,如何改变点的颜色。例如,如果一个点的值 (x,y,z) 大于 (16,400,65) ,我想用灰色绘制它。如果小于这个值,我想用红色。

我正在尝试使用awk,它只绘制不同颜色的两个点。这是我的代码。

gnuplot>splot "< awk '{if( ($2 > \"16\") || ($1 > \"400\") || ($3 > \"65\"))  print}'                                       
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "grey", \
"< awk '{if( ($2 < \"16\") || ($1 < \"400\") || ($3 < \"65\"))  print}' 
./8_77_non_pareto_data.dat " u 2:1:3 w p pt 8 lc rgb "red", \
"./8_77_pareto_data.dat" u 2:1:3 w i lt 1 lc rgb "blue" t "Pareto points"

我的数据文件如下所示:

48      15.057599573464184      68      361
93      14.950459657063462      73      361
48      14.065204842090914      69      361
280     13.16320458043516       69      361
120     15.05281009307949       66      361
48      15.133322961840786      59      361
48      16.161631503473544      73      361
470     17.763180586730847      77      361

X 轴范围从 6 到 22。

Y 轴范围从 0 到 500。

Z 轴范围从 35 到 85。

我想将其可视化为在 (16,400,65) 周围有一个 3 维的边界框。盒子里面的东西都是红色的,外面的东西都是灰色的。

希望有人可以在这里帮助我。

P.S :蓝点打印得很好,虽然这里的示例数据没有显示满足某些条件,但有些点满足该条件。我没有在这里发布整个文件。

【问题讨论】:

标签: gnuplot


【解决方案1】:

您可以通过定义一个简单的函数来稍微减少 awk 的工作量并在纯 gnuplot 中完成:

#!/usr/bin/env gnuplot

set terminal png set output 'test.png'

bigx = 16; bigy = 400; bigz = 65

isbig(x,y,z) = (x > bigx || y > bigy || z > bigz) ? 1 : 0

set palette defined (0 0.5 0.5 0.5, 1 1 0 0) # (grey, red)

unset colorbox
set xrange [0:20]; set yrange [0:500]; set zrange [0:100]

splot 'data.dat' using 2:1:3:(isbig($2,$1,$3)) with points pt 7 palette notitle, \
      '' using (1e6):1:1 with points pt 7 lc rgb '#888888' title 'in box', \
      '' using (1e6):1:1 with points pt 7 lc rgb 'red' title 'not in box'

(在我看来,设置范围和取消设置颜色框的线条以及两个额外的绘图命令只是为了让事情变得漂亮。它提供了一个描述两种颜色含义的键,而没有分散注意力的颜色框。)

【讨论】:

  • 另一个快速的问题。假设我有两个文件,都像上面描述的那样。一个拥有最优数据,而我向您展示的一个拥有非最优/次优数据。我的目标是将两者都绘制在同一个图上,尽管非最佳的在灰色的边界框之外,在红点框内的次优的(这两个在一个文件中)和最佳点在蓝色脉冲(这些在另一个文件中)。现在,如果我尝试在同一个图上绘制最佳点,所有点都会变为灰色。请问各位大神指点一下?
  • 听起来您在这里遇到的问题略有不同,我建议您将其作为一个新问题发布,并附上可重现该问题的示例脚本和数据。现在我怀疑调色板是问题所在,但我不确定。此外,您似乎是 SO 的新手,所以我想提一下,如果您喜欢一个答案,那么赞成并接受它是一种常见的礼貌 :)
  • 我会这样做的。谢谢。但是当我尝试对其进行投票时(我昨天已经尝试过:)),它说至少需要 15 个代表点才能投票。我该怎么做?
  • 获得声誉的方法有多种 (stackoverflow.com/faq#reputation),但总的来说,只要不断提出和回答好问题!
  • 您能否详细说明示例的最后两行?相反,我可以将积分用于开箱即用,而将冲动用于开箱即用吗?现在,我认为 splot 的第一行决定了我的绘画风格。还有其他方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 2015-05-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多