Go 每日一库之 plot

简介

本文介绍 Go 语言的一个非常强大、好用的绘图库——plotplot内置了很多常用的组件,基本满足日常需求。同时,它也提供了定制化的接口,可以实现我们的个性化需求。plot主要用于将数据可视化,便于我们观察、比较。

快速使用

先安装:

$ go get gonum.org/v1/plot/...

后使用:

package main

import (
  "log"
  "math/rand"

  "gonum.org/v1/plot"
  "gonum.org/v1/plot/plotter"
  "gonum.org/v1/plot/plotutil"
  "gonum.org/v1/plot/vg"
)

func main() {
  rand.Seed(int64(0))

  p, err := plot.New()
  if err != nil {
    log.Fatal(err)
  }

  p.Title.Text = "Get Started"
  p.X.Label.Text = "X"
  p.Y.Label.Text = "Y"

  err = plotutil.AddLinePoints(p,
    "First", randomPoints(15),
    "Second", randomPoints(15),
    "Third", randomPoints(15))
  if err != nil {
    log.Fatal(err)
  }

  if err = p.Save(4*vg.Inch, 4*vg.Inch, "points.png"); err != nil {
    log.Fatal(err)
  }
}

func randomPoints(n int) plotter.XYs {
  points := make(plotter.XYs, n)
  for i := range points {
    if i == 0 {
      points[i].X = rand.Float64()
    } else {
      points[i].X = points[i-1].X + rand.Float64()
    }
    points[i].Y = points[i].X + 10 * rand.Float64()
  }

  return points
}

程序运行输出points.png图片文件:

 

 

 

plot的使用比较直观。首先,调用plot.New()创建一个“画布”,画布结构如下:

// Plot is the basic type representing a plot.
type Plot struct {
  Title struct {
    Text string
    Padding vg.Length
    draw.TextStyle
  }
  BackgroundColor color.Color
  X, Y Axis
  Legend Legend
  plotters []Plotter
}

然后,通过直接给画布结构字段赋值,设置图像的属性。例如p.Title.Text = "Get Started设置图像标题内容;p.X.Label.Text = "X"p.Y.Label.Text = "Y"设置图像的 X 和 Y 轴的标签名。

再然后,使用plotutil或者其他子包的方法在画布上绘制,上面代码中调用AddLinePoints()绘制了 3 条折线。

最后保存图像,上面代码中调用p.Save()方法将图像保存到文件中。

更多图形

gonum/plot将不同层次的接口封装到特定的子包中:

  • plot:提供了布局和绘图的简单接口;
  • plotter:使用plot提供的接口实现了一组标准的绘图器,例如散点图、条形图、箱状图等。可以使用plotter提供的接口实现自己的绘图器;
  • plotutil:为绘制常见图形提供简便的方法;
  • vg:封装各种后端,并提供了一个通用矢量图形 API。

条形图

条形图通过相同宽度条形的高度或长短来表示数据的大小关系。将相同类型的数据放在一起比较能非常直观地看出不同,我们经常在比较几个库的性能时使用条形图。下面我们采用json-iter/go的 GitHub 仓库中用来比较jsonitereasyjsonstd三个 JSON 库性能的数据来绘制条形图:

package main

import (
  "log"

  "go
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值