Я пытаюсь oop просмотреть список параметров для одной функции, чтобы нарисовать одну отдельную строку для каждого значения параметра. Цикл работать не будет: все линии нарисованы одинаково (только последняя линия). Он работает, если я отбрасываю цикл. См. Код ниже (секция цикла закомментирована).
package main
import (
"fmt"
"gonum.org/v1/plot"
"gonum.org/v1/plot/plotter"
"gonum.org/v1/plot/vg"
"image/color"
"math"
)
func main() {
etaarr := []float64{0.3, 0.5, 0.7}
etalabel := []string{"0.3", "0.5", "0,7"}
etacolor := []color.RGBA{{B: 255, A: 255}, {G: 255, A: 255}, {R: 255, A: 255}}
p, err := plot.New()
if err != nil {
panic(err)
}
p.Title.Text = "TESTFUNCPLOT2"
p.X.Label.Text = "c"
p.Y.Label.Text = "u"
p.X.Min = 0
p.X.Max = 100
p.Y.Min = 0
p.Y.Max = 40
p.Add(plotter.NewGrid())
crra := make([]*plotter.Function, len(etaarr))
/* Plots all lines as one (=last) line: Why??
for i, iv := range etaarr {
crra[i] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-iv)) - 1.0) / (1.0 - iv) })
fmt.Println("i=", i, " iv=", iv)
}
*/
// Plots 3 separate lines:
crra[0] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[0])) - 1.0) / (1.0 - etaarr[0]) })
crra[1] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[1])) - 1.0) / (1.0 - etaarr[1]) })
crra[2] = plotter.NewFunction(func(c float64) float64 { return (math.Pow(c, (1.0-etaarr[2])) - 1.0) / (1.0 - etaarr[2]) })
for i, _ := range etaarr {
crra[i].Color = etacolor[i]
p.Add(crra[i])
p.Legend.Add(etalabel[i], crra[i])
}
// Save the plot to a PNG file.
if err := p.Save(6*vg.Inch, 4*vg.Inch, "testfuncplot2.png"); err != nil {
panic(err)
}
fmt.Println("Finished")
} // End func main