我试图在gnuplot中执行以下操作:渐变椭圆的颜色。每个点 ellipse的z值由函数
给出charge_density(t,beta) = -sin(t)*beta*(sqrt(1-(beta**2)))/(1-((sin(t)*beta)**2))
椭圆的半径函数由类似的函数给出:
radius(t,beta) = sqrt(1-(beta**2))/sqrt(1-((sin(t)*beta)**2))
其中beta
只是满足0<beta<1
的参数,而t
是角度。
好吧,我尝试将"+"
特殊文件与lc rgb variable
选项一起使用,但它不适用于极坐标。
我也试过了set mapping cylindrical
,但没有发生任何事情。
这只能用笛卡尔坐标吗?在这种情况下,我必须做2个图形并修改上述功能......
或者我是否必须使用angle, radius, z
数据创建数据文件?
我希望使用pm3d
和以下palette
执行此操作:
set palette model RGB defined (-1 "blue", 0 "black", 1 "red")
答案 0 :(得分:3)
这是代码:
beta =0.5
charge_density(t,beta) = -sin(t)*beta*(sqrt(1-(sin(t)*beta)**2))/(1-((sin(t)*beta)**2))
radius(t,beta) = sin(t*beta) # your function equals 1!
# convert polar to carthesian
r_x(t)=radius(t,beta)*cos(t)
r_y(t)=radius(t,beta)*sin(t)
set palette model RGB defined (-1 "blue", 0 "black", 1 "red")
set size ratio -1 # same unit length in x and y
# number of sample points.
# increase if curve has edges
set samples 100
#decouple range of "+" and xrange
set parametric
plot [0:3*pi] "+" u (r_x($1)):(r_y($1)):(charge_density($1,beta))\
with lines linewidth 3 linecolor palette
结果是:
注意:您的radius
等于1,所以我采取了另一项功能。此外,您的charge_density
还有一个额外的右括号。
一些意见:
如果使用lc rgb variable
绘图,则需要24位RGB颜色值:
(red*256^2 + green*256 + blue)
的 red, green, blue = 0...255
如果您希望gnuplot根据调色板使用颜色,请写下lc palette
gnuplot 4.6不支持极地"+"
。此外,mapping
设置3D绘图的行为。但是,当您的公式计算角度的半径时,您可以轻松地将其转换为carthesian坐标并绘制这些坐标。还有一个缺点:plot
中给出的范围也设置了xrange。这也意味着当您更改xrange时曲线的“长度”会发生变化。您可以通过set parametric
来解决这个问题,这会导致gnuplot在绘制函数时使用专用变量u而不是x。这也很好(并且帮助你),这也会影响特殊文件"+"
。我不知道这是一个(正面)错误还是一个功能。