gpt4 book ai didi

common-lisp - 热图 :vgplot? 的隐藏非特征

转载 作者:行者123 更新时间:2023-12-05 03:21:12 25 4
gpt4 key购买 nike

不是 gnuplot 专家(我上次使用它是在 25 年前)并且对 Common Lisps 有一些有用的应用 :vgplot包,这次我想创建一个热图 - 令我惊讶的是 - 我无法找到,如何去做 - 即使经过 2 小时的谷歌搜索和修补。

我在 debian 系统上的常用 emacs-slime 组合中使用 sbcl。

正在加载 vgplot :

(ql:quickload :vgplot)

通过阅读 github 上的资源和谷歌搜索“裸”gnuplot 的热图示例,我推断,我可能必须使用 (vgplot:surf)函数,它使用 splot在引擎盖下。事实上 - 我看到一个 3d 网格图,当运行函数 bla 时下面:

(defun bla ()
(let* ((xy-range (vgplot:range 0 10))
(xx (vgplot:meshgrid-x xy-range xy-range))
(yy (vgplot:meshgrid-y xy-range xy-range))
(zz (vgplot:meshgrid-map #'+ xx yy)))
(vgplot:surf xx yy zz)))

bla result

通过阅读 gnuplot google 结果,一些“pm3d”的东西没有解释就出现了,我想我需要使用 (vgplot:format-plot nil "<something>")将图形变成热图,但我不知道我到底需要做什么。

希望我不是唯一一个使用 vgplot 的人,我很乐观,对于任何经常使用它的人来说,这是一个简单的答案。

最佳答案

您可能想使用 gnuplot 的调色板映射三维模式pm3d。此模式将三维数据映射到调色板,您可以将 view 设置为 map 选项以将视点置于表面上方。

这是来自 vgplot 的示例已调整为显示为热图的文档:

;; Adapted from vgplot documentation for SURF function.
;; Example 3: Plot a function z = f(x,y), e.g. the sombrero function:
(defun example-3-heatmap ()
(let* ((eps double-float-epsilon)
(fun #'(lambda (x y)
(/ (sin (sqrt (+ (* x x) (* y y) eps)))
(sqrt (+ (* x x) (* y y) eps)))))
(x (vgplot:range -8 8 0.2))
(y (vgplot:range -8 8 0.2))
(xx (vgplot:meshgrid-x x y))
(yy (vgplot:meshgrid-y x y))
(zz (vgplot:meshgrid-map fun xx yy)))

;; Set color palette:
(vgplot:format-plot
nil
"set palette model RGB defined ( -1 'web-green', 0 'goldenrod', 1 'red' )")

;; Put gnuplot in pm3d mode:
(vgplot:format-plot nil "set pm3d")
(vgplot:format-plot nil "set hidden3d") ; render opaque surface
(vgplot:format-plot nil "set view map") ; view from above

(vgplot:surf xx yy zz)))

这里的format-plot是用来给gnuplot发送一个设置调色板的命令,然后format-plot用来放gnuplot 进入 pm3d 模式,从上方渲染一个不透明的表面。

Philipp Janert 有一本好书叫 Gnuplot in Action包含有关创建假色图(热图)的部分。

这是上述示例代码的示例输出:

Example 3 Heatmap

关于common-lisp - 热图 :vgplot? 的隐藏非特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73025086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com