要在go语言中绘制数列的趋势图,遵循下面的步骤:
步骤1:安装绘图库
首先,需要安装gonum绘图库。在终端中运行以下命令来获取和安装库:
go get -u gonum.org/v1/plot/...
确保工作环境已配置gopath,并且$gopath/bin已添加到path中。
步骤2:准备数列数据
确保数列数据以某种方式可获得,例如存储在文本文件中(每行一个数值)。例如,数据文件(data.txt)可能看起来是这样的:
12 23 12 34 23 24
步骤3:编写go程序
创建一个新的go文件,比如 main.go,编写以下程序来读取数据和生成趋势图。
package main
import (
"bufio"
"log"
"os"
"strconv"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/vg"
)
func main() {
// 打开并读取数据文件
f, err := os.open("data.txt")
if err != nil {
log.fatal(err)
}
defer f.close()
scanner := bufio.newscanner(f)
points := make(plotter.xys, 0)
i := 0.0
for scanner.scan() {
y, err := strconv.parsefloat(scanner.text(), 64)
if err != nil {
log.fatalf("error parsing value: %v", err)
}
points = append(points, plotter.xy{x: i, y: y})
i++
}
if err := scanner.err(); err != nil {
log.fatal(err)
}
// 创建图表
p := plot.new()
p.title.text = "数列趋势图"
p.x.label.text = "序号"
p.y.label.text = "数值"
// 添加线条
line, err := plotter.newline(points)
if err != nil {
log.fatal(err)
}
p.add(line)
// 保存图表
if err := p.save(10*vg.inch, 4*vg.inch, "trend.png"); err != nil {
log.fatal(err)
}
}
步骤4:编译并运行程序
在终端中,编译go文件:
go build main.go
运行编译后的程序:
./main
程序将会生成一个名为 trend.png 的趋势图图片文件:

补充说明:
- 如果数列很大(如13万行),可能需要调整程序以适应这件量级,可能包括内存管理和图形的分辨率等方面。
- 在绘图时,可以自定义图形的样式,比如线条宽度、颜色和图表的尺寸等。
- 上述代码示例考虑到了数据可能解析出错的情况,并相应地处理了错误。
按照上述步骤,能够使用go语言和gonum绘图库来绘制数列趋势图了。
拓展
golang 在图像中绘制矩形框
从获取的坐标信息,在图像中绘制矩形框,并添加标注信息。
1. 依赖
- 字体 simsun.ttc
- 第三方库 github.com/fogleman/gg
2. 源码
package main
import (
"encoding/json"
"fmt"
"image"
"image/color"
"image/draw"
"log"
"math"
"reflect"
"strings"
"github.com/fogleman/gg"
)
// test_draw_rect_text 画图像矩形, 标注, 颜色; 返回保存图像路径
// ref: https://github.com/fogleman/gg/blob/master/examples/rotated-image.go
func test_draw_rect_text(im_path, font_path, detect_label, save_path string, x, y, w, h float64) {
// load image
im, err := gg.loadimage(im_path)
if err != nil {
log.fatal(err)
}
// 1 method
// iw, ih := im.bounds().dx(), im.bounds().dy()
// set context
// dc := gg.newcontext(iw, ih)
// draw image
// dc.drawimage(im, 0, 0)
// 2 method
dc := gg.newcontextforimage(im)
// set color and line width
dc.sethexcolor("#ff0000")
dc.setlinewidth(1)
// draw rectangle
dc.drawroundedrectangle(x, y, w, h, 0)
// store set
dc.stroke()
// set font and draw label
var font_height float64 = 7
if err := dc.loadfontface(font_path, font_height); err != nil {
panic(err)
}
rect_center_x := x + w/2
rect_center_y := y + h/2
dc.drawstringanchored(detect_label, rect_center_x, rect_center_y, 0.5, 0.5)
dc.clip()
// save png image
dc.savepng(save_path)
}
func main() {
im_path := "/home/tianzx/pictures/lena.jpeg"
font_path := "/home/tianzx/ai_model/simsun.ttc"
detect_label := "缺角/碎裂"
save_path := "/home/tianzx/pictures/lena_test.png"
var x, y, w, h float64 = 50, 100, 50, 50
test_draw_rect_text(im_path, font_path, detect_label, save_path, x, y, w, h)
}
3. 结果


到此这篇关于golang绘制数列趋势图的操作步骤的文章就介绍到这了,更多相关golang绘制趋势图内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论