Ubuntu下Fortran数据可视化实操指南
一、常用方案与适用场景
- GNUplot:轻量、交互式,2D/3D皆可;Fortran负责生成数据文件,GNUplot负责绘图,适合快速出图与批量脚本化。
- PLplot:成熟的C/Fortran绘图库,支持多种输出设备与2D/3D;适合在Fortran程序内直接调用API绘图。
- DISLIN:商业级绘图库,Fortran接口友好,2D/3D与多图布局简单;适合对成图质量和开发效率有要求的场景。
- PGPLOT:经典科学绘图库,2D为主;在Linux上需自行编译配置,兼容老旧代码较多。
- Python+Matplotlib联动:Fortran输出数据,Python脚本绘图;适合出版级图形与复杂可视化流程。
二、方法一 GNUplot快速出图
- 安装与准备
- 安装:sudo apt-get update && sudo apt-get install gnuplot
- 编译Fortran:sudo apt-get install gfortran
- 示例
- Fortran写数据(data.f90)
program data
implicit none
integer :: i
open(unit=10, file='data.txt', status='replace')
do i = 1, 100
write(10, *) i*0.1, sin(i*0.1)
end do
close(10)
end program data
- 编译运行:gfortran -o data data.f90 && ./data
- GNUplot绘图
- 交互式:gnuplot
- plot ‘data.txt’ using 1:2 with lines title ‘sin(x)’
- 设置标签与图例:set xlabel ‘x’; set ylabel ‘y’; set key left
- 批处理成PNG:gnuplot -e “set terminal png; set output ‘plot.png’; plot ‘data.txt’ u 1:2 w l t ‘sin(x)’”
三、方法二 在Fortran中调用绘图库
- PLplot
- 安装:sudo apt-get install libplplot-dev
- 编译:gfortran -o plot_example plot_example.f90 -lplplot
- 特点:可在Fortran内调用初始化、坐标轴、曲线/曲面等API,支持多设备输出。
- DISLIN
- 安装:按官方指引安装并设置环境变量(DISLIN 为商业库,需授权)。
- 示例(绘制 y = x^2 折线)
program simple_plot
implicit none
integer, parameter :: n = 10
real :: x(n), y(n)
integer :: i
do i = 1, n
x(i) = real(i)
y(i) = x(i)**2
end do
call disini()
call pagera()
call name('X-Axis', 'x')
call name('Y-Axis', 'y')
call title('Simple Plot of y = x^2')
call curve(x, y, n)
call disfin()
end program simple_plot
- 编译(示例):gfortran -o simple_plot simple_plot.f90 -ldislin
- 特点:API简洁,2D/3D、多窗口、曲面/等高线、出版级成图方便。
- PGPLOT(需编译)
- 步骤概览:下载源码,编辑 drivers.list 启用所需驱动(如 X11、PNG),运行 makemake,修改 Makefile 将 FCOMPL=g77 改为 gfortran,执行 make;设置环境变量:export PGPLOT_DIR=/your/pgplot/install;export PGPLOT_DEV=/XServe;运行示例 ./pgdemo1 验证。
- 特点:2D为主,生态成熟,但在现代编译器下可能需要少量兼容性处理。
四、方法三 Python Matplotlib联动
- 安装
- sudo apt-get install python3 python3-pip
- pip3 install matplotlib numpy
- Fortran写数据(write_data.f90)
program write_data
implicit none
integer, parameter :: n = 100
real :: x(n), y(n)
integer :: i
do i = 1, n
x(i) = i*0.1
y(i) = sin(x(i))
end do
open(newunit=10, file='data.txt', status='replace')
do i = 1, n
write(10, *) x(i), y(i)
end do
close(10)
end program write_data
- Python绘图脚本(plot_script.py)
import matplotlib.pyplot as plt, numpy as np
x, y = np.loadtxt('data.txt', unpack=True)
plt.plot(x, y, label='sin(x)')
plt.xlabel('x'); plt.ylabel('y'); plt.title('From Fortran')
plt.legend(); plt.grid(True); plt.show()
- 运行
- gfortran -o write_data write_data.f90
- ./write_data
- python3 plot_script.py
- 特点:成图质量高、主题与字体控制灵活,适合论文/报告与复杂可视化。
五、选型与排错建议
- 选型建议
- 快速探索与批处理:优先用GNUplot。
- 在Fortran内完成绘图、少依赖外部进程:选PLplot或DISLIN。
- 维护老代码或教学演示:可考虑PGPLOT。
- 追求出版级图形与可重复性工作流:用Fortran+Matplotlib。
- 常见问题
- 找不到库:编译时加入正确链接选项(如 -lplplot、-ldislin),并设置环境变量(如 PGPLOT_DIR)。
- 中文乱码:GNUplot/Matplotlib需配置支持中文的字体(如 DejaVu、Noto Sans CJK)。
- 图形设备不可用:PLplot/DISLIN/PGPLOT需启用对应设备驱动(如 X11、PNG、PDF)。
- 数据格式问题:确保列分隔符与读取列号一致(GNUplot 常用 using 1:2 指定第1、2列)。