多个线图在gonum / plot中共享abscissas轴

问题描述 投票:-3回答:1

是否有可能在gonum / plot中制作具有共同横坐标轴的多个线图?

在matplotlib中它看起来像这样。 Sharing X axis

go gonum
1个回答
1
投票

对的,这是可能的。你可以使用plot.Align

package main

import (
    "math/rand"
    "os"

    "gonum.org/v1/plot"
    "gonum.org/v1/plot/plotter"
    "gonum.org/v1/plot/vg"
    "gonum.org/v1/plot/vg/draw"
    "gonum.org/v1/plot/vg/vgimg"
)

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

    const rows, cols = 2, 1
    plots := make([][]*plot.Plot, rows)
    for j := 0; j < rows; j++ {
        plots[j] = make([]*plot.Plot, cols)
        for i := 0; i < cols; i++ {

            p := randomLinePlot(rand.Intn(10))

            // make sure the horizontal scales match
            p.X.Min = 0
            p.X.Max = 5

            plots[j][i] = p
        }
    }

    img := vgimg.New(vg.Points(150), vg.Points(175))
    dc := draw.New(img)

    t := draw.Tiles{
        Rows: rows,
        Cols: cols,
    }

    canvases := plot.Align(plots, t, dc)
    for j := 0; j < rows; j++ {
        for i := 0; i < cols; i++ {
            if plots[j][i] != nil {
                plots[j][i].Draw(canvases[j][i])
            }
        }
    }

    w, err := os.Create("aligned.png")
    if err != nil {
        panic(err)
    }

    png := vgimg.PngCanvas{Canvas: img}
    if _, err := png.WriteTo(w); err != nil {
        panic(err)
    }
}

这会在单个PNG文件中生成以下图:

您可以在plot.Align的GoDoc条目下找到另一个示例

© www.soinside.com 2019 - 2024. All rights reserved.