如果在绘制图表时能够隐藏坐标轴、不显示图例、不显示图表标题,那么以gonum/plot包画点、画线的能力,完全可以用于绘制一般的图形。另外,如果生成图片文件后能够立即打开查看会更方便。本节将介绍实现这两点的方法。
package main
import (
"image/color"
"math"
"os/exec"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/vg"
t "tools"
)
func main() {
//新建一张图表
p, _ := plot.New()
//设置图表标题为空
p.Title.Text = ""
//隐藏坐标轴
p.HideAxes()
//为第一条(Tanh函数)曲线分配1000点容量的空间
points1 := make(plotter.XYs, 0, 1000)
//循环获取每个x点的Tanh函数值
for x := -10.0; x <= 10.0; x = x + 0.1 {
y := math.Tanh(x)
points1 = append(points1, plotter.XY{X:x, Y: y})
}
//新建一条折线
line1, _ := plotter.NewLine(points1)
//设置画线使用的颜色、宽度、线型等
line1.LineStyle.Color = color.RGBA{R: 0xFF, G:0, B: 0x00, A: 0xFF}
line1.LineStyle.Width = vg.Points(3)
line1.LineStyle.Dashes =[]vg.Length{vg.Points(5), vg.Points(5)}
//在图表中加入该折线
p.Add(line1)
//保存图表到图片文件
p.Save(8*vg.Inch, 8*vg.Inch,"points.png")
//用系统默认的应用软件打开图片
cmd := exec.Command("cmd","/C", "start", "", "./points.png")
err := cmd.Start()
if err != nil {
t.Printfln("打开图片时发生错误:%v", err.Error())
}
}
代码 5‑50 隐藏坐标轴及立即打开图片查看
* 注:本系列文章中的代码,一般可以在https://github.com/topxeq/goexamples中找到,本例可参考其中的plot3代码。
代码5‑50中,使用plot.HideAxes函数来实现隐藏坐标轴,通过给p.Title.Text赋值为空字符串来实现隐藏图表的标题,通过不调用任何plot.Legend.Add函数来实现不显示图例。注意,在设置所绘制线的颜色时我们这次并没有通过修改影响所有线的默认线条颜色变量plotter.DefaultLineStyle.Color,而是修改了表示该折线的变量实例line1的成员变量中对应颜色的成员变量值(即line1.LineStyle.Color),另外本例中还修改了折线line1的宽度和线型,用的也是类似的方法。直接修改折线自身成员变量的颜色等属性是比较推荐的方法,因为这样不会影响其他的线条。
最后,本例代码中又使用os/exec包中的Command函数生成了一个exec.Cmd类型的数据结构变量cmd,然后调用cmd的Start函数执行系统命令来调用系统默认的应用程序打开该图片。“./points.png”是特殊的路径表示方法,在路径中字符“.”有特殊含义,表示当前工作目录,因此“./points.png”表示“当前目录下的points.png文件”,其中路径分隔符使用了斜杠“/”,这在Windows、MacOS和Linux下都通用。在Windows系统下程序执行后会用默认的图片查看软件自动打开如下图所示的图片:
![1b1532640a3c3b039f7589dc3b29b9c9.png](https://img-blog.csdnimg.cn/img_convert/1b1532640a3c3b039f7589dc3b29b9c9.png)
图 5.11 单独绘制的曲线
可以看出,曲线线条的颜色、粗细、线型都有所变化,线型变成了虚线(点划线)。
注意,如果在MacOS下,则应将这一条语句:
cmd := exec.Command("cmd", "/C", "start", "", "./points.png")
修改为:
cmd := exec.Command("open", "./points.png")
Linux系统下则可以改为下述代码进行尝试:
cmd := exec.Command("xdg-open", "./points.png")
Gonum包的使用就介绍到这里,网络上还有其他一些用于绘制图表的第三方包,有兴趣的话也可以自行搜索尝试。