plot - 从 gnuplot 中的表中标记 2d 等高线图
问题描述
我需要使用带有数据表的 gnuplot 创建一个 2D 等高线图。我不确定如何标记轮廓。
我无法使用 splot 功能创建等高线标签,因为我想在等高线图上添加 2D 图。
下面是复制代码以创建2D等高线图。我的问题是如何使用数据表创建标签。
reset
f(x,y)=(x**2+y-11)**2+(x+y**2-7)**2
set xrange [0:5]
set yrange [0:5]
set isosample 250, 250
set table 'test1.dat'
splot f(x,y)
unset table
set contour base
set cntrparam levels disc 450,250,150,100,60,30,10,2
unset surface
set table 'cont1.dat'
splot f(x,y)
unset table
reset session
set terminal wxt size 800,600 enhanced font 'Verdana,10' persist
set style arrow 2 head nofilled size screen 0.03,15 ls 2 lc rgb "blue"
set xrange [0:5]
set yrange [0:5]
unset key
#set palette rgbformulae 33,13,10
p 'cont1.dat' w l lt -1 lw 1.5
这是cont1.dat
基于运行上述代码的样子。最后一列是我想让它绘制等高线图的标签。
解决方案
我不清楚您是在谈论轮廓的“标签”还是轮廓的“键”(或图例)。这是两种可能性的最小化示例。我假设您刚刚为演示目的选择了一个函数,但您的数据将来自文件。
避免曲线间隙的一个技巧(没有外部脚本)是跳过 5 行set datafile commentschar " "
并取columnheader(5)
. 然后将类似的行# Contour 0, label: 2
视为数据,其中第 5 列是您的键。显然,尽管 commentschar 设置为空格,但实际数据仍然(或幸运地)未被解释为注释。
代码:
### contour lines with labels
reset session
f(x,y)=(x**2+y-11)**2+(x+y**2-7)**2
set xrange [0:5]
set yrange [0:5]
set isosample 250, 250
set contour base
set cntrparam levels disc 450,250,150,100,60,30,10,2
unset surface
set table $Contour
splot f(x,y)
unset table
set style textbox opaque noborder
set multiplot layout 2,1
plot $Contour u 1:2 w l lw 1.5 notitle, '' u 1:2:3 every 50 w labels boxed notitle
set datafile commentschar " "
plot for [i=1:8] $Contour u 1:2:(i) skip 5 index i-1 w l lw 1.5 lc var title columnheader(5)
unset multiplot
### end of code
结果:
添加:
如果您添加该行
set key top left opaque box
并将绘图命令交换为:
plot for [i=1:8] $Contour u 1:2 skip 5 index i-1 w l lw 1.5 lc 0 dt i title columnheader(5)
您将获得以下信息:
请注意,只有 5 种预定义的破折号类型会重复,但是,您可以定义自己的破折号模式(请参阅 参考资料help dashtype
)。
推荐阅读
- java - 使用超类型创建 MapFunction 时编译失败
- android - 在 Android/iOS 中创建引擎时,如何将参数传递给 Flutter/Dart 主函数?
- python - 两个 Pyspark Dataframe 之间的字符串比较,但存在多对多关系
- node.js - 猫鼬 MongoError : 11000
- android - 使用缩略图页面时的 WebView 问题
- spring-boot - 使用 springboot JPA 进行 AQ 消息传递
- asp.net-core - 简化 .net core web api 设计复杂度
- java - 如何将数据从活动传递到服务?
- linux - 使用linux计算两个日期之间的时间差
- java - 是否有任何功能可以将 CIDR 块拆分为 IP 开始和 IP 结束而不在雪花中使用 Parse_IP