LoginSignup
3
0

More than 3 years have passed since last update.

Golangで積み上げ棒グラフ(stacked bar chart)を描く

Last updated at Posted at 2019-05-28

Golangで積み上げ棒グラフを描く

Goで積み上げ棒グラフを描こうと思ったのですが,日本語による参照情報が見つからなかったので,英語で調べて分かったことをまとめます.

Overview

完成図

stackedBarChart.png

コード全体

積み上げ棒グラフの生成でポイントとなるのは,StackOn関数です.
この関数を利用すれば,棒グラフを「上に乗せる」ことができます.

func (b *BarChart) StackOn(on *BarChart)
package main

import (
    "log"

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

func main() {

    // サンプルデータを生成します
    groupA := plotter.Values{1500, 1500, 1400, 2100, 1100}
    groupB := plotter.Values{2800, 2600, 1600, 2100, 800}
    groupC := plotter.Values{1800, 2100, 1500, 1300, 900}
    groupD := plotter.Values{1600, 3500, 2600, 1700, 600}

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

    p.Title.Text = "utility cost"
    p.Y.Label.Text = "cost"

    // 棒の横幅を設定します
    w := vg.Points(30)

    // barsA がグラフの一番下になります
    barsA, err := plotter.NewBarChart(groupA, w)
    if err != nil {
        log.Panic(err)
    }
    // グラフの色を設定します
    barsA.Color = plotutil.Color(0)
    // グラフ自体を囲む枠線を設定します 0にすると,黒の枠線がなくなります
    barsA.LineStyle.Width = vg.Length(0)

    barsB, err := plotter.NewBarChart(groupB, w)
    if err != nil {
        log.Panic(err)
    }
    barsB.Color = plotutil.Color(1)
    // barsB を barsA の上に乗せます
    barsB.StackOn(barsA)

    barsC, err := plotter.NewBarChart(groupC, w)
    if err != nil {
        log.Panic(err)
    }
    barsC.Color = plotutil.Color(2)
    // barsC を barsB の上に乗せます
    barsC.StackOn(barsB)

    barsD, err := plotter.NewBarChart(groupD, w)
    if err != nil {
        log.Panic(err)
    }
    barsA.Color = plotutil.Color(3)
    // barsD を barsC の上に乗せます
    barsD.StackOn(barsC)

    p.Add(barsA, barsB, barsC, barsD)
    p.Legend.Add("Electric bill", barsA)
    p.Legend.Add("Water bill", barsB)
    p.Legend.Add("Gas fee", barsC)
    p.Legend.Add("Telephone fee", barsD)
    p.Legend.Top = true
    p.Legend.Left = false
    p.NominalX("January", "February", "March", "April", "May")

    err = p.Save(5*vg.Inch, 5*vg.Inch, "stackedBarChart.png")
    if err != nil {
        log.Panic(err)
    }

}

参照サイト

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0