GLPK/Gnuplot
外观
< GLPK
Gnuplot 是一个用于生成函数、数据和数据拟合的二维和三维图表的程序。Gnuplot 在 GNU 通用公共许可证下发布。
Gnuplot 期望直方图的数据以多列形式提供。
以下示例基于examples/transp.mod来自 GLPK 源代码分发
solve;
printf '""' > 'transp1.dat';
printf {j in J} ' "%s"', j >> 'transp1.dat';
printf '\n' >> 'transp1.dat';
for {i in I} {
printf '"%s"', i >> 'transp1.dat';
printf {j in J} ' %f', x[i,j] >> 'transp1.dat';
printf '\n' >> 'transp1.dat';
}
上面的 MathProg 语句(插入到transp.mod的数据语句之前,并另存为名为transp1.mod的文件中)将使用以下命令创建:glpsol --math transp1.mod,在文件transp1.dat:
"" "New-York" "Chicago" "Topeka" "Seattle" 50.000000 300.000000 0.000000 "San-Diego" 275.000000 0.000000 275.000000
中创建以下内容:transp1.dat可以使用 gnuplot 绘制
reset
set terminal png truecolor transparent font "Arial, 16" size 800x600
set output "transp1.png"
set title 'Result of transp.mod'
set style data histogram
set style histogram cluster gap 1
set style fill solid border −1
set boxwidth 0.9
set bmargin 5
set grid y
set xrange [−0.5:2.5]
set xtics out nomirror
plot 'transp1.dat' \
using 2:xtic(1) title columnheader(2), \
for [i=3:4] '' using i title columnheader(i)
的直方图,然后将其保存为 PNG 图像上面的命令可以手动输入到交互式 gnuplot 会话中。调用gnuplot从命令行启动这样的会话。或者,可以将相同的命令保存在文本文件transp1.gp
gnuplot> load "transp1.gp"
中,然后作为脚本从 gnuplot 中运行最后,使用任何位图查看器检查生成的transp1.png
gthumb transp1.png &
,例如 gthumb
三维直方图使用 gnuplot 从 GLPK 解生成的 3D 直方图
- Gnuplot 不直接支持原生 3D 直方图。可以使用以下规则将具有矩形网格的曲面传递给 gnuplot
- 每个点提供一行文本,每个字段之间用空格隔开
- 同一栅格线上的连续点应位于连续的文本行上
在连续栅格线上的点之间放置一个空文本行。examples/transp.mod:
solve; printf '' > 'transp2.dat'; for { i in I } { for { j in J } { printf '%i "%s"', sum{k in I: k < i} 1, i >> 'transp2.dat'; printf ' %i "%s"', sum{l in J: l < j} 1, j >> 'transp2.dat'; printf ' %f', x[i,j] >> 'transp2.dat'; printf '\n' >> 'transp2.dat'; printf '%i "%s"', sum{k in I: k < i} 1, i >> 'transp2.dat'; printf ' %i "%s"', sum{l in J: l <= j} 1, '' >> 'transp2.dat'; printf ' %f', x[i,j] >> 'transp2.dat'; printf '\n' >> 'transp2.dat'; } printf '\n' >> 'transp2.dat'; for { j in J } { printf '%i "%s"', sum{k in I: k <= i} 1, '' >> 'transp2.dat'; printf ' %i "%s"', sum{l in J: l < j} 1, j >> 'transp2.dat'; printf ' %f', x[i,j] >> 'transp2.dat'; printf '\n' >> 'transp2.dat'; printf '%i "%s"', sum{k in I: k <= i} 1, '' >> 'transp2.dat'; printf ' %i "%s"', sum{l in J: l <= j} 1, '' >> 'transp2.dat'; printf ' %f', x[i,j] >> 'transp2.dat'; printf '\n' >> 'transp2.dat'; } printf '\n' >> 'transp2.dat'; } data; set I := San-Diego Seattle; set J := Chicago New-York Topeka;
要创建 3D 直方图,需要提供直方图每个柱子的 4 个角点。以下示例再次基于如前所述,可以使用 gnuplot 绘制transp2.dat
reset set terminal png font "Arial, 16" transparent size 800,800 set output "transp2.png" set title 'Result of transp.mod' set xtic offset first 0.5, first −0.25, first 0 mirror set ytic offset first 0.25, first 0.5, first 0 mirror set nokey set pm3d set palette gray set grid x y z splot 'transp2.dat' using 1:3:5:xtic(2):ytic(4) with pm3d