Gnuplot 5中颜色不足时,如何用线型区分同图40条曲线?
在Gnuplot 5中实现多曲线颜色+线型自动循环区分
刚好我对Gnuplot 5的样式循环机制很熟悉,针对你要绘制约40条曲线的需求,完全可以通过颜色+线型的组合循环来解决颜色耗尽的问题,而且不需要手动一条条定义样式,用Gnuplot的循环命令就能自动生成足够的组合。
方法步骤:
1. 先自定义差异化的线型(可选但推荐)
默认的线型差异可能不够明显,先定义几种辨识度高的线型,比如:
# 自定义4种不同线型,线宽统一设为2保证清晰 set linetype 1 solid lw 2 set linetype 2 dashed lw 2 set linetype 3 dotted lw 2 set linetype 4 dot-dash lw 2
2. 自动生成颜色+线型的组合样式循环
利用Gnuplot的do for嵌套循环,结合调色板颜色和我们定义的线型,生成足够的样式组合(比如4种线型×10种调色板颜色=40种,刚好满足你的需求):
# 先清空现有样式循环,避免冲突 set style cycle reset # 嵌套循环生成组合:遍历线型,每个线型下遍历调色板的10个颜色节点 do for [lt=1:4] { do for [frac=0:0.9:0.1] { # 每次循环添加一个样式:调色板颜色 + 指定线型 set style cycle add "lc palette frac ".frac." lt ".lt } }
这里lc palette frac <数值>是调用调色板的相对位置颜色,0到1覆盖整个调色板,步长0.1就取10种差异化颜色;你也可以调整步长(比如0.05)来获取更多颜色,或者用set palette maxcolors <N>来增加调色板的颜色数量。
3. 直接绘制曲线即可
之后执行你的plot命令,每条曲线会自动依次使用我们生成的样式:
# 示例:绘制40条数据文件 plot for [i=1:40] 'data_'.i.'.dat' title "Curve ".i
这样曲线会先用完所有颜色的线型1,再切换到线型2的所有颜色,以此类推——即使颜色重复,线型的差异也能让你轻松区分每条曲线。
额外小技巧
如果觉得调色板的颜色不够满意,可以自定义调色板,比如用set palette defined (0 "#ff0000", 1 "#00ff00", 2 "#0000ff", ...)来指定自己喜欢的颜色序列,再结合线型循环使用。
内容的提问来源于stack exchange,提问作者Ferdinando Randisi
相关产品推荐
相关产品推荐

