A large collection of Gnuplot examples

I needed to use Gnuplot a little bit over the last few days, mostly to create 2D line charts, and these are my brief notes on how to get started with Gnuplot. If you haven’t used it before, it’s an amazing tool for creating graphs and charts. Jumping right in … Installing gnuplot To get started, you can use MacPorts or Homebrew to install Gnuplot on macOS systems: port install gnuplot brew install gnuplot Note that with Mac OS X Yosemite (10.10.x) running on an old Mac, I had to use this brew command instead: ...

January 9, 2025 · 7 分钟 · 1334 字 · Unknown

Pretty Plots with Gnuplot

Given a data file that looks something like this: // f(GHz) S211(dB) S212(dB) S213(dB) S214(dB) S215(dB) S216(dB) S217(dB) 0.100E+00 -0.743E-03 0.586E-03 -0.390E-02 -0.787E-02 -0.930E-02 -0.159E-01 -0.164E-01 0.200E+00 -0.354E-02 -0.616E-02 -0.161E-01 -0.270E-01 -0.374E-01 -0.537E-01 -0.673E-01 0.300E+00 -0.820E-02 -0.174E-01 -0.364E-01 -0.589E-01 -0.843E-01 -0.117E+00 -0.152E+00 0.400E+00 -0.147E-01 -0.331E-01 -0.649E-01 -0.104E+00 -0.150E+00 -0.206E+00 -0.272E+00 We want to make a plot. The X-axis of the plot is column 1 and the Y-axes are all the other columns. The software we’re going to use is gnuplot. ...

January 9, 2025 · 6 分钟 · 1071 字 · Unknown

使用GMT在平面图上绘制轨迹动画

此脚本可用于在平面图上绘制轨迹。例子为绘制LGD算法的迭代路径,数据如下(仅截取前10行): 0 20 20 20 20 1 21.2864 20.6638 21 21 2 21.9939 21.0072 23.198 23.3067 3 22.4359 21.2145 26.3405 27.2079 4 22.5849 21.2829 32.1681 37.2527 5 26.0376 22.8571 32.8254 37.0327 6 28.1978 23.6712 33.8682 36.4159 7 31.0379 24.6084 34.8022 35.6868 8 31.104 24.626 37.3802 33.666 9 32.2038 24.918 38.7026 32.4291 数据共5列,分别为序号、轨迹1x、轨迹1y、轨迹2x、轨迹2y。 脚本 #!/usr/bin/env bash # 1. Create files needed in the loop cat << 'EOF' > pre.sh gmt begin pre gmt set FONT_ANNOT_PRIMARY=15p,Times-Roman,black gmt set FONT_LABEL=15p,Times-Roman,black gmt set MAP_GRID_CROSS_SIZE_PRIMARY=5p gmt set MAP_FRAME_PEN=thinnest,black gmt set MAP_TICK_LENGTH_PRIMARY=4p/2p gmt grd2cpt data/gauss_model.nc -Clapaz -R0/100/0/100 -Z -D gmt grdimage data/gauss_model.nc -R0/100/0/100 -Bxag+l"x (m)" -Byag+l"y (m)" -JX15c/15c -X4.5c -Y1.5c gmt end EOF # 2. Set up the main frame script cat << 'EOF' > main.sh gmt begin # Plot smooth blue curve and dark red dots at all steps so far gmt convert data/lgd_trace.txt -qi0:${MOVIE_FRAME} > data.txt gmt plot data.txt -W0.05p,white -R0/100/0/100 -JX15c/15c -X4.5c -Y1.5c -i1,2 gmt plot data.txt -Sc0.05i -Gred -i1,2 gmt plot data.txt -W0.05p,yellow -R0/100/0/100 -JX15c/15c -i3,4 gmt plot data.txt -Sc0.05i -Gblack -i3,4 gmt end EOF # 3. Run the movie gmt movie main.sh -Sbpre.sh -Cxga -Tdata/lgd_trace.txt -Vi -D5 -Zs -Nlgd_anim -Fmp4 动画 您的浏览器不支持视频标签 查看完整脚本。

December 26, 2024 · 1 分钟 · 192 字 · 张壹

一个简单的GMT动画例子

使用GMT程序包内的movie命令可以生成动画,更好地展示数据的动态变化。下面是一个利用该命令绘制动画的简单例子: 您的浏览器不支持视频标签 1. 准备程序 首先编写动画背景图的生成脚本,包括生成绘图所需的数据等工作也可以在此完成(如果已有外部数据则不需要)。在实际运行中不需要手动执行此脚本,而是通过movie命令调用。 # 使用heredoc方式将脚本保存到一个shell文件pre.sh # 在<<后添加-表示忽略tab制表符(注意不会忽略空格) cat <<- EOF > pre.sh # 使用gmt math生成数据,=号后接输出文件名称 # -T命令指定x坐标范围 # T SIND指定要计算的函数名称 gmt math -T0/360/10 T SIND = sin_point.txt gmt math -T0/360/1 T SIND = sin_curve.txt # 开始绘制底图 gmt begin # 使用gmt basemap绘制一张空的底图 具体的名称含义查看gmt文档 # -R指定坐标范围 -JX指定投影类型和地图大小 -X -Y平移图像 # -B指定坐标轴样式(包括ticks、labels和grids设置等) # --FONT_ANNOT_PRIMARY设置字体大小 gmt basemap -R0/360/-1.2/1.6 -JX22c/11.5c -X1c -Y1c \ -BWSne+glightskyblue -Bxa90g90f30+u@. -Bya0.5f0.1g1 --FONT_ANNOT_PRIMARY=9p gmt end # 结束 EOF 2. 准备主程序 编写动画生成的主脚本。movie命令内置了一批常量和变量可供使用,其中常量包括: ...

December 25, 2024 · 2 分钟 · 255 字 · 张壹

Visualising and plotting data with gnuplot

Introduction Data visualisation is extremely important for communicating the results of your research, either in a journal or to the general public, and for analysing and learning more about the characteristics of your data and system (so-called “exploratory data analysis”). One of the most fundamental tools in data visualisation is the two-dimensional plot (or graph). This tutorial will cover the basics of two-dimensional data visualisation using a program called gnuplot; a program which allows you to create high-quality, visually-pleasing figures and undertake robust post-hoc data analysis. ...

March 31, 2023 · 40 分钟 · 8370 字 · Emily Kahl

GMT 脚本进阶(四):GMT 的 C 语言 API

本系列共 4 篇:(一)Shell 技巧 · (二)怎样 getopts · (三)分享与扩展 · (四)C 语言 API 说明:本篇为归档笔记,内容仍在整理中,后续会继续补充。 简单的说明 作者在本系列的前几期教程中给大家分享了一些编写 GMT 脚本的小技巧,相信大家如果应用得当的话一定能有效提升你的脚本质量。本期教程所涉及的内容并不是 shell 脚本的相关内容,而是关于 GMT 动态库的使用方法。这也是我这几天研究的结果,想给大家粗略地介绍一下,也算给自己留个档。 本篇教程中所使用编程语言为 C/C++,因为也算是预编译脚本吧,姑且就放在这个系列里了。其实 GMT 的接口语言类型很丰富,包括 Matlab、Julia、python 等等,以后有机会再给大家分享这些语言的接口用法。目前,GMT 官方对于其动态库 API 的说明文档还不是很完善,因此很多地方我也是摸着石头过河,不是很清楚,请大家见谅。 本篇教程不涉及动态库的构建讲解,仅从一般使用方法入手。首先我们大致讲解一下 GMT 的 C 语言接口的总体使用策略。 总体策略 一般我们在命令行或者脚本中使用 GMT 命令时,典型的用法如下: $ gmt grd2cpt example.nc -Rd -Z -D > user.cpt 我们大致可以将这个命令分成这样几个部分: gmt grd2cpt 指定我们要使用的模块; example.nc 输入文件; -Rd -Z -D 模块使用的参数; user.cpt 输出文件。 其中,2 到 4 可以合并成一项,即某个模块运行需要的一系列参数,其实就是一个字符串。因此,我们首先祭出最核心的一个接口(函数): int GMT_Call_Module (void *API, const char *module, int mode, void *args); 这个函数一共有 4 个参数,分别为: void *API GMT 模块调用总接口指针,同一个指针表示同一组调用。一般不用管,除非你在一个程序里要调用多组画图流程; const char *module 需要调用的模块名称,如 grd2cpt; int mode 调用的模式,一般为 GMT_MODULE_CMD(文后我们会列出可选的类型); void *args 模块调用使用的参数,如 example.nc -Rd -Z -D > user.cpt。 看明白了么?GMT 的 C 语言接口其实非常的强大(傻瓜),我们要做的就是根据我们的数据编写相应模版的参数字符串。例如上面的 grd2cpt 命令从 API 调用就可以写成: ...

September 4, 2020 · 1 分钟 · 142 字 · 张壹

GMT 脚本进阶(三):脚本的分享与扩展

本系列共 4 篇:(一)Shell 技巧 · (二)怎样 getopts · (三)分享与扩展 · (四)C 语言 API 上一篇文章中我们介绍了如何使用 getopts 来获取 GMT 脚本执行时需要的命令行参数。通过使用 getopts 我们已经基本实现了 GMT 绘图过程的对象化,即给一个网格文件画一张图这样的基本操作。这样的工作流程的确很方便,但是它也有它不方便的地方。 其一是你不太可能在编写脚本之初就考虑到以后在使用过程中的所有需求,所以你可能还是需要经常为你的脚本添加和修改命令选项。这当然很好,你的脚本会越来越强大。但是过多的命令选项会让脚本的使用变得越来越困难,其他人可能需要花很多时间来学习它。而且,有的需求其实是一次性的,这时候去修改脚本显然并不划算。另一个不足之处是分享你的脚本将变得困难。设想这样一个情景,你想分享你的数据和对应的绘图脚本给你的同事,你发现你面对的并不是简单地将文件夹打包一下的情况。你需要将你的模版脚本拷贝到文件夹打包发送,然后告诉你的同事怎么使用这个脚本绘图,或者另写一个说明。这无疑增加了整个分享过程的复杂度。要是你的同事想将压缩包分享给第三人,那情况就更复杂了。 看到这里你可能会想“赶紧来点干的啊!”。 干的来了。 本篇教程我们就是要来解决分享与扩展性的问题,即如何将脚本特例化。什么意思?为了应对分享与扩展性这两个问题,我们的解决思路是在需要的时候为特定的数据(集)自动生成对应的绘图脚本。这个脚本内只包含 GMT 绘图命令,所以可以在任何装有 GMT 的电脑上运行。你的同事面对的只是单纯的 GMT 脚本,因此不需要额外学习任何其他知识。同时,你自己可以使用生成的脚本进行二次编辑,从而满足额外的绘图需求。这样就大大提高了模版脚本的扩展性。 说了这么多,到底怎么弄? 答:写一个 Shell 函数,接收一个规则字符串和一个命令字符串,视规则执行或者打印命令字符串。就是说每当我们要执行一条 GMT 绘图命令时都要经过这个函数。如果我们想要绘图,这个时候就执行这个绘图命令;如果我们想要得到的是命令本身,就打印这条命令。 有了这个思路,我们来直接看这个函数: # 执行输入的语句或者将其显示在屏幕上 参数1(0显示 1执行)参数2(命令语句)参数3(命令语句) RunOrEcho() { # 预处理 去除命令语句中的制表符 first_str=`echo ${2// /''}` # 判断第三个参数是否存在 if [[ x${3} != x ]]; then sec_str=`echo ${3// /''}` fi # 如果第一个参数为1则执行命令语句 否则在屏幕上显示命令语句 if [[ ${1} == 1 ]]; then ${first_str} if [[ x${3} != x ]]; then ${sec_str} fi else if [[ x${3} != x ]]; then printf "%s\n%s\n" "${first_str}" "${sec_str}" else printf "%s\n" "${first_str}" fi fi } 简单地测试一下这个函数: ...

July 22, 2020 · 2 分钟 · 419 字 · 张壹

GMT 脚本进阶(二):怎样用 getopts 拾取命令行参数

本系列共 4 篇:(一)Shell 技巧 · (二)怎样 getopts · (三)分享与扩展 · (四)C 语言 API 上一篇文章中我们介绍了一些在 GMT 脚本编写中可能会用到的 Shell 编程基础知识,今天我们将介绍 Linux 中一个很棒的内置命令 getopts。使用它我们可以方便地自定义标签并获取命令行参数。本篇教程将首先通过一个例子介绍 getopts 的使用方法,然后结合之前我们学习的 gmt_shell_functions.sh 脚本编写一个自动化绘制平面图的 Shell 脚本。如果你准备好了,我们就开始吧。 getopts 简短说明 话不多说,先上例子(personal_info.sh,不用着急看脚本,我们会在后面逐步讲解): #!/bin/bash # 这个简单脚本会拾取姓名、年龄与性别三个参数并显示对应的信息。 # 初始化三个变量name age gender为Unknown name="Unknown" age="Unknown" gender="Unknown" # 显示个人信息 参数依次为 name age gender show_info() { if [[ ${2} -ge 18 && ${3} == 'm' ]]; then echo ${1} is a ${2} years ago man. elif [[ ${2} -ge 18 && ${3} == 'f' ]]; then echo ${1} is a ${2} years ago woman. elif [[ ${2} -lt 18 && ${3} == 'm' ]]; then echo ${1} is a ${2} years ago boy. elif [[ ${2} -lt 18 && ${3} == 'f' ]]; then echo ${1} is a ${2} years ago girl. else echo "Alien." fi } # 使用getopts从命令行获取参数 while getopts "hn:a:g:" arg do case $arg in # 拾取到-h选项,显示帮助信息后退出 h) printf "usage: ${0##*/} -n<name> -a<age> -g<gender> [-h]\n" printf "%s\t%s\n" "-n" "Your name" printf "%s\t%s\n" "-a" "Your age." printf "%s\t%s\n" "-g" "Your gender. Enter 'm' for male and 'f' for female." printf "%s\t%s\n" "-h" "Show help information." exit 0;; n) name=$OPTARG;; # 对变量进行赋值,注意后跟双分号结束。 a) age=$OPTARG;; g) gender=$OPTARG;; ?) # 拾取到未知参数,显示帮助信息后退出。 printf "error: unknow argument\nuse -h option to see help information.\n" exit 1;; esac done # 检查参数值并调用函数显示个人信息 if [[ ${name} != "Unknown" && ${age} != "Unknown" && ${gender} != "Unknown" ]]; then show_info ${name} ${age} ${gender} fi 在终端运行此脚本: ...

July 6, 2020 · 4 分钟 · 685 字 · 张壹

GMT 脚本进阶(一):Shell 编程技巧

本系列共 4 篇:(一)Shell 技巧 · (二)怎样 getopts · (三)分享与扩展 · (四)C 语言 API 一般来说,我们在使用 GMT 绘制图件时可能会保留一些老的脚本。在需要时拷贝到工作文件夹中,再做适当修改并使用。这种方式的好处是对于特定数据有定制化的绘图脚本,可以方便的分享给他人。但是这种方式的不足即是脚本编写的工作量大、复用性差。而且随着脚本数量的增多,我们可能很难快速找到适用的老脚本。所以,利用 Shell 可编程属性,将常用的绘图流程标准化、模块化是提高 GMT 使用效率的重要一步,也是我们 GMT 脚本进阶的第一步。 本系列将分步骤介绍如何编写模块化的 GMT 脚本,帮助我们在日常使用中达到在任意文件夹内无需编写专门脚本也可以快速出图、批量化出图的要求。本篇内容为 Shell 编程中的一些基础知识,在我们后续的教程中会用到,大家可以先熟悉一下。 本教程中的脚本均在 Bash Shell 中测试通过。Windows 用户可使用 PowerShell。 使用变量 Shell 中可声明并使用变量,语法如下: # 注意变量名称与值之间用等号连接,不能有空格 name="Joe" age="19" # 使用变量时需添加$符号或使用${}包含,下面的语句将在终端显示Joe is 19 echo ${name} is ${age} # 对变量赋值时不需要添加$符号 age=20 # 下面的语句将在终端显示Joe is 20 echo ${name} is ${age} 为保证变量的正确调用,建议在任何时候都使用 ${ } 的方式。需要说明的是 Shell 中的所有变量都是作为字符串处理的,所以 age="19" 与 age=19 的含义是一样的。我们可以使用双引号或单引号来表示一个字符串,不同的是双引号中可包含变量,而单引号内的所有字符都将按照其原意进行处理。 使用函数 在 Shell 中我们可以将常用方法定义为函数,方便重复使用与管理。语法如下: # function标识可省略 function <func_name>() { <action> # return语句可省略 <return int> } 看一个具体的例子: ...

July 4, 2020 · 1 分钟 · 200 字 · 张壹

netcdf数据可视化(二)——Panoply简要使用说明

Panoply是由NASA开发的一款Netcdf浏览与绘图免费软件,支持多种系统平台。绘图效果还蛮不错的,可以方便地获得高质量的图件。 下载安装 下载Panoply 使用说明 Youtube使用教程 Youku使用教程

December 1, 2018 · 1 分钟 · 6 字 · 张壹