Многострочные участки, разделяющие ось абсцисс на участке / участке

Можно ли сделать несколько линейных графиков с общей осью абсцисс в гоне / графике?

В matplotlib это будет выглядеть так. Совместное использование оси X

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:

Два выровненных участка в одном файле

Вы можете найти другой пример ниже записи GoDoc для plot.Align

Другие вопросы по тегам