Cha*_*lie 7 gnuplot colors contour
我正在绘制数据,如之前的Stackoverflow问题所述:
gnuplot 2D极坐标图与3D数据集的热图 - 可能吗?
它主要适用于我,我对一些小细节很感兴趣.其中之一是如何控制轮廓线颜色和线宽.网上有很多关于使用的帖子,set style increment user后面是用户风格的定义set style line 1 lc rgb "blue" lw 2理论上,这应该强制使用新定义的样式绘制线条.我尝试过它并没有用.另外,当我通过我的gnuplot安装进入帮助页面时,我发现这个用法已被我的版本弃用(版本4.7补丁级别0最后修改2013-07-25).建议使用set linetype,它会为当前gnuplot的调用永久地更改gnuplot行样式的特征.杀死并重新启动gnuplot会恢复默认的线型特征.
接下来,我重新启动了gnuplot,重新生成了绘图,没有重新定义轮廓线的任何线型或类型.当我查看我的情节时,我可以看到线条颜色以青色开始,然后是紫色,然后是蓝色(例如,类型为5,4,3或14,13,12等).似乎线型通过可用的样式进入BACKWARDS.好吧,我想,我可以改变那些并与奇怪的行为一起生活.但是,在发出多个set linetype命令后,将所有这些线型更改为明显不同的东西(我通过运行test命令验证了这些,图上的轮廓线仍然具有与以前相同的颜色和线宽.我可以似乎没有弄清楚轮廓线使用什么线型,所以我无法改变相应的线型.
也许这种奇怪的行为是轮廓线属于类型的结果,set cntrparam levels increment -6,-6,-24负值和/或负向增量会导致一些不可预测的行为?
我想知道如何知道该图中轮廓线将使用哪种线型,以及如果用于构建曲面图的线数发生变化,这种线型是否会改变.例如,下图所示的图使用13"线"来生成表面set pm3d map.因此,假设N = 13行 - 是否有一条规则符合第一个轮廓线型?例如,我是否总是确定轮廓线样式将从N = 14开始?我知道当输入数据中的"行"数量变化时,第一行和后续轮廓行将使用哪种行类型.
最重要的是我需要将某种样式应用于用于每个轮廓级别的轮廓线.我希望在输入数据更改时始终对每个级别使用相同的样式.该图总是使用相同的轮廓水平集:-6,-12,-18和-24.绘图数据将始终具有大约0的最大"z"坐标并从那里减小.
Gnuplot命令如下所示.该图的数据集可以在这里下载:http: //audio.claub.net/temp/new_test.dat
reset
set terminal pngcairo size 800,800
set output '3d-polar.png'
set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9
set pm3d map interpolate 20,20
unset key
set multiplot
# plot the heatmap
set cntrparam bspline
set cntrparam points 10
set cntrparam levels increment -6,-6,-24
set contour surface
#set style increment user #NOTE: the commented out lines do not seem to affect color or width of the the contour lines no matter what number I use for the linetype
#set linetype 8 lc rgb "blue" lw 2
#set linetype 9 lc rgb "black" lw 1
#set linetype 10 lc rgb "orange" lw 1
#set linetype 11 lc rgb "yellow" lw 1
set palette rgb 33,13,10 #rainbow (blue-green-yellow-red)
set cbrange [-18:0]
unset border
unset xtics
unset ytics
set angles degree
r = 3.31 #This number is Log10(max frequency) - Log10(min frequency) of the polar frequency grid
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8
splot 'new_test.dat'
# now plot the polar grid only
set style line 11 lc rgb 'black' lw 2 lt 0
set grid polar ls 11
set polar
set logscale r 10
set rrange[10:20000]
unset raxis
set rtics format '' scale 0
#set rtics axis scale
set rtics (20,50,100,200,500,1000,2000,5000,10000,20000)
do for [i=-150:180:30] {
dum = r+0.15+0.05*int(abs(i/100))+0.05*int(abs(i/140))-0.05/abs(i+1)
set label i/30+6 at first dum*cos(i), first dum*sin(i) center sprintf('%d', i)
}
set label 20 at first 0, first -(log(20)/log(10)-1) center "20"
set label 100 at first 0, first -(log(100)/log(10)-1) center "100"
set label 200 at first 0, first -(log(200)/log(10)-1) center "200"
set label 1000 at first 0, first -(log(1000)/log(10)-1) center "1k"
set label 2000 at first 0, first -(log(2000)/log(10)-1) center "2k"
set label 10000 at first 0, first -(log(10000)/log(10)-1) center "10k"
set label 20000 at first 0, first -(log(20000)/log(10)-1) center "20k"
plot NaN w l
unset multiplot
unset output
Run Code Online (Sandbox Code Playgroud)
不能控制轮廓线的图如下所示.我需要能够为轮廓线指定线条颜色和宽度.怎么样?

以下是如何更改轮廓线的线属性.我无法解释为什么会这样,我只是通过测试发现.遗憾的是,没有关于这些细节的文档.
行为如下(使用4.6.3.和4.7(2013-07-25和2013-09-09)测试,都显示相同的行为):
如果没有linetype指定splot,表面本身将使用lt 1.在这种情况下,绘制第一个轮廓lt 3.是的,编号与指定的增量相比是向后的.但你可以用set cntrparam levels increment -6,-6,-18或者反转它set cntrparam levels increment -18,6,-6
在linewidth所有的轮廓是相同的,也等于linewidth用于绘图命令,去改变它.例如:使用splot 'new_test.dat' lw 3.
结果(没有较粗的线)如问题所示.
轮廓使用的linestyle索引比绘图命令使用的索引高1.
您还必须定义第一个linestyle,表面将使用它.如果未定义此样式,则轮廓将恢复使用linetype.
在linewidth从第一拍摄linestyle,所有lw从以下设置中ls被忽略.
轮廓使用的linetype索引比绘图命令使用的索引高1.
所有linetype必须定制,也是第一个,表面使用的.否则使用默认设置.
lw同样的linestyle.
为了测试,我使用了您的数据和以下精简脚本:
reset
set terminal pngcairo size 800,800
set output '3d-polar.png'
set lmargin at screen 0.05
set rmargin at screen 0.85
set bmargin at screen 0.1
set tmargin at screen 0.9
set pm3d map interpolate 20,20
# plot the heatmap
set cntrparam bspline
set cntrparam points 10
set cntrparam levels increment -6,-6,-18
set contour surface
set palette rgb 33,13,10
set cbrange [-18:0]
unset border
unset xtics
unset ytics
set angles degree
r = 3.31
set xrange[-r:r]
set yrange[-r:r]
set colorbox user origin 0.9,0.1 size 0.03,0.8
# load one of the following files:
#load 'linestyle.gp'
#load 'linetype.gp'
splot 'new_test.dat' title ' '
Run Code Online (Sandbox Code Playgroud)
该cbrange只被定义下来-18,因此我适时改变轮廓的水平(-24不反正画).
我使用的两个"轮廓设置文件"是:
linetype.gp:
set linetype 1 lc rgb "blue" lw 3
set linetype 2 lc rgb "black"
set linetype 3 lc rgb "orange"
set linetype 4 lc rgb "yellow"
Run Code Online (Sandbox Code Playgroud)
linestyle.gp:
设置样式增量用户
set style line 1 lc rgb 'blue' lw 3
set style line 2 lc rgb 'black'
set style line 3 lc rgb 'orange'
set style line 4 lc rgb 'yellow'
Run Code Online (Sandbox Code Playgroud)
两者都给出相同的输出图像:

要将其用于完整脚本,只需在splot命令之前直接加载其中一个文件即可.这给出了输出:

在您关于轮廓的第一个问题之后,我即将提交一份错误报告,但结果却很难将其归结为具体问题.有了这个问题,它可能会更容易.我会看看是否有时间这样做.
| 归档时间: |
|
| 查看次数: |
19526 次 |
| 最近记录: |