渐变色极性曲线

时间:2014-11-22 09:44:07

标签: gnuplot

我试图在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")

1 个答案:

答案 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

结果是:

enter image description here

注意:您的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。这也很好(并且帮助你),这也会影响特殊文件"+"。我不知道这是一个(正面)错误还是一个功能。