Golang绘制数列趋势图的操作步骤

 更新时间:2024年04月02日 09:45:31   作者:=(^.^)=哈哈哈  
数列趋势图是用来表示数列中各项之间的变化趋势的图形,它可以帮助我们观察和分析数列的规律和特点,一般来说,数列趋势图可以分为两种类型:折线图和散点图,本文给大家介绍了Golang绘制数列趋势图的操作步骤,文中有详细的代码示例,需要的朋友可以参考下

要在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绘制趋势图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言map字典用法实例分析

    Go语言map字典用法实例分析

    这篇文章主要介绍了Go语言map字典用法,实例分析了map字典的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Go定时器cron的使用详解

    Go定时器cron的使用详解

    本篇文章主要介绍了Go定时器cron的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 教你一招完美解决vscode安装go插件失败问题

    教你一招完美解决vscode安装go插件失败问题

    VSCode是我们开发go程序的常用工具,但是安装VSCode成功后,创建一个.go文件居然提示错误了,所以下面下面这篇文章主要给大家介绍了如何通过一招完美解决vscode安装go插件失败问题的相关资料,需要的朋友可以参考下
    2022-07-07
  • Golang极简入门教程(一):基本概念

    Golang极简入门教程(一):基本概念

    这篇文章主要介绍了Golang极简入门教程(一):基本概念,本文讲解了Golang的基本知识、基础语法、相关术语等,需要的朋友可以参考下
    2014-10-10
  • 深入浅析Go中三个点(...)用法

    深入浅析Go中三个点(...)用法

    这篇文章主要介绍了深入浅析Go中三个点(...)用法,需要的朋友可以参考下
    2021-10-10
  • Go语言中普通函数与方法的区别分析

    Go语言中普通函数与方法的区别分析

    这篇文章主要介绍了Go语言中普通函数与方法的区别,以实例形式对比分析了普通函数与方法使用时的区别与相关技巧,需要的朋友可以参考下
    2015-02-02
  • RabbitMQ延时消息队列在golang中的使用详解

    RabbitMQ延时消息队列在golang中的使用详解

    延时队列常使用在某些业务场景,使用延时队列可以简化系统的设计和开发、提高系统的可靠性和可用性、提高系统的性能,下面我们就来看看如何在golang中使用RabbitMQ的延时消息队列吧
    2023-11-11
  • Go语言列表List获取元素的4种方式

    Go语言列表List获取元素的4种方式

    Golang的列表元素的获取可以使用内置的 Front 函数获取头结点,使用 Back 函数获取尾结点,使用 Prev 获取前一个结点,使用 Next 获取下一个结点,本文就介绍了Go语言列表List获取元素的4种方式,感兴趣的可以了解一下
    2022-04-04
  • 在Golang中执行Shell命令的教程详解

    在Golang中执行Shell命令的教程详解

    在本教程中,我们将学习如何在 Golang 中执行shell命令(如 ls、mkdir 或 grep ),我们还将学习如何通过 stdin 和 stdout 传递 I/O 到正在运行的命令,以及管理长时间运行的命令,感兴趣的同学可以借鉴一下
    2023-05-05
  • Go构建高性能的命令行工具使例详解

    Go构建高性能的命令行工具使例详解

    这篇文章主要为大家介绍了Go构建高性能的命令行工具使例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12

最新评论