gnuplot - 使用 gnuplot 从离散数据中绘制平滑球体
问题描述
我有从 python 代码生成的数据,如下所示:
u, v = np.mgrid[0:2*np.pi:180*1j, 0:np.pi:90*1j]
X = np.cos(u)*np.sin(v)
Y = np.sin(u)*np.sin(v)
Z = np.cos(v)
这被写入一个文件tmp.dat
,我尝试在 gnuplot 中绘制它:
set pm3d
set palette
set hidden
splot "tmp.dat" using 1:2:3 with pm3d
然而,这给了我:
它大致在我想要的附近,但我想要一个光滑的球体,而不是这个。(我的真实数据也是如此;我希望在封闭的表面上具有透明度。)我尝试添加set dgrid3d 50,50
尝试和插值,但是,我实际上并不明白我从中得到了什么:
任何帮助或建议将不胜感激。将数据更改为参数(使用u
和v
扫描数据)是一种选择,但是,我不确定如何做到这一点 - 当我尝试时,结果是一样的。
解决方案
不是一个完整的答案,但您的部分问题是“set hidden3d”在这里不可用。Gnuplot 有两个独立的子系统来表示表面。其中之一,由“set hidden3d”控制,跟踪边界线段并可以移除被遮挡的部分。另一个是 pm3d,它使用实体填充四边形而不是边界线段。pm3d 绘图没有删除被遮挡的四边形的选项,但您可以通过对它们进行深度排序来获得类似的效果。相关命令是
set pm3d depthorder
如果单个四边形近似为正方形,则此方法效果相当好,但对于细长的四边形会产生不好的结果,因为刻面的两端相对于相邻刻面可能具有冲突的深度。
推荐阅读
- google-cloud-dataflow - GCP Pub/Sub 订阅者未在 Apache Dataflow 管道中接收消息
- python - Pandas 中的数据透视表将指定列中的值“分解”为单独的列
- laravel - 如何使用 Laravel 安装程序安装最新的 LTS 版本?
- c# - 关闭浏览器后 Xamarin 在错误页面中触发 OnAppearing 事件
- c# - finally 块没有像微软在它的文档中所说的那样执行
- python - 如何在 plotly express 图表旁边添加一个表格并将它们保存为 pdf
- jackson - Swagger OpenApi 3.0 Jaxrs:使用 oneOf 导致 InvalidDefinitionException:无法构造实例
- python - 在python中更改netcdf变量中的单位
- php - Formdata 只发送第一个对象的名称
- javascript - TypeError:无法读取未定义的属性“减少”