我生成一个.txt文件,其中包含四个列:X,Y和Z坐标以及一个标量变量。 每行的前三个值描述与标量值关联的3D单一矢量。
我想将结果绘制为彩色球形表面。 我不能随便使用pm3D,因为数据不是采用矩阵格式,也就是说,在X坐标中跳转后没有空格。而且,几乎没有两个相同的X坐标。
我能做的最好的就是使用带有调色板选项的splot,我知道它将使用第4列中的数据为每个点分配颜色。
要绘制的数据保存在“ star.txt”中,这是一个具有4列,最多10.000行的简单文本文件。
Gnuplot脚本看起来像
set terminal wxt size 800,800
set mapping cartesian
set view equal xyz
set xlabel 'x'
set ylabel 'y'
set zlabel 'z'
splot "star.txt" palette pointtype 7
pause -1
如果有一种方法可以使表面上的颜色平滑变化,那就太好了。目前,了解颜色区域在哪里并不容易。同样,人们可以看到实际上远离观察者的表面点。
答案 0 :(得分:1)
如果相邻点的颜色是由于一个在正面而另一个在背面,则可以通过添加命令来改善效果
set hidden3d
这将对距查看器的距离上的点进行排序,以便最后绘制前表面上的点,因此不会被后表面上的点遮挡。可以将颜色设为半透明,以便您可以“透视”它,但这将使区分正面和背面变得更加困难而不是更加容易。
跟进
问题不在于插值。问题在于您正在绘制点,并且每个点都是某种单色。尚不清楚您想要绘制什么。一个完美的领域?适合于这些点的表面,可以是球形,也可以不是球形?是您对这些点应用了着色功能,还是这些点本身定义了所需的颜色?
1)如果您要问如何绘制一个完美的彩色球体,请参阅例如最近问题的答案: gnuplot: Plotting a function on the surface of a sphere 因为您是专门询问插值的,所以我会注意到,如果您增加插值的级别,该答案中显示的颜色会更平滑:
set pm3d interpolate 3,3 # your choice of values > 1
2)如果您要问如何根据已知点处的值表示的某种方案对任意表面着色,我认为答案是当前稳定的gnuplot版本(5.2)无法做到那,但是开发版本(5.3)可以。请参阅上一个问题的答案 Heatmap of points in a volume,尤其是在线演示 http://gnuplot.sourceforge.net/demo_5.3/voxel.html。我在下面复制了该演示的最终情节。