Gnuplot:停止对3D绘图中的数据求平均的网格线

时间:2016-04-01 13:55:46

标签: gnuplot

我遇到了一个问题,我试图在3D中绘制吉布斯分布P = exp(-E / kT)(P vs E vs T)并在其上放置网格线。我基本上想要重现第3页顶部的http://arxiv.org/pdf/0803.0217.pdf,但每当我插入网格线时,它会对数据进行平均而且我的情节看起来几乎是平的(它没有急剧下降)在T-> 0附近关闭,因为它平均过多的数据)。任何人都可以帮我这个吗? TY

1 个答案:

答案 0 :(得分:1)

如果您尝试使用默认范围绘制该函数的图形,您将获得几乎平坦的图像

# Arbitrary value for k.  
# I am not familiar with the physics here, so this may or may not be a reasonable value.
k = 2

P(E,T) = exp(-E/(k*T))
set xlab "Energy"
set ylab "Temperature"
splot P(x,y)

enter image description here

请注意,在y = 0(y为温度)时存在尖峰,这些尖峰接近显着的z值(3.5 x 10 ^ 21)。由于剩余的值永远不会超过1(是一个概率),这些峰值会超过其他所有值,因此图表在其他地方显得平坦。按照评论中的建议调整isosamples无济于事。

它不是很漂亮,但如果我们将z范围限制为set zrange[0:2]的小间隔,我们可以看到这种情况发生的地方。

enter image description here

这里的问题是,对于具有正能量的低负温度,该函数趋于无穷大(反之亦然)。低正温度(具有正能量)不具有该问题(在T = 0时该函数未定义,但是当T> 0时,T从上方接近0的极限被明确定义为0)。在上下文中,无论如何,x或y都不具有负值。

要解决此问题,请将x和y范围设置为0到8(与链接的图像匹配),然后调高isosamples(以提供更精细的网格)

set xrange[0:8]
set yrange[0:8]
set isosamples 100

现在使用splot P(x,y)进行绘图可生成与所需图像类似的图像

enter image description here

或略微粗糙的网格(set isosamples 30

enter image description here

注意,这里缺少温度= 0的线。这又是因为那里没有定义函数。我们可以设置一个非常接近0的范围,但是远离0来弥补这一点(在更精细的网格gnuplot中,或者甚至没有在那里尝试一条线,或者缺失的线太密集而不能注意到){ {1}}。

enter image description here