package echart import ( "github.com/go-echarts/go-echarts/v2/charts" "github.com/go-echarts/go-echarts/v2/opts" "github.com/go-echarts/go-echarts/v2/types" ) type LineChartOpt struct { Global ChartOpt Smooth bool // 是否平滑过度 } type LineChartData struct { Legend string // 图例名称 Color *string // 图例颜色 Stack *string // 图例堆叠名称,相同的名称会堆叠到一起 Data []opts.LineData } func LineSmoothArea(opt LineChartOpt, data []LineChartData) *charts.Line { line := charts.NewLine() line.SetGlobalOptions( charts.WithInitializationOpts(opts.Initialization{ Theme: types.ThemeShine, Width: "1280px", Height: "500px", }), charts.WithTitleOpts(opts.Title{ Title: opt.Global.Title, Subtitle: opt.Global.Subtitle, }), charts.WithTooltipOpts(opts.Tooltip{ Trigger: "axis", }), charts.WithXAxisOpts(opts.XAxis{ Type: "time", // ⏰ 时间轴关键设置 }), charts.WithLegendOpts(opts.Legend{ Show: opts.Bool(true), }), ) for _, d := range data { lineOpt := []charts.SeriesOpts{} lineChartOpt := opts.LineChart{} lineChartOpt.Smooth = opts.Bool(opt.Smooth) if d.Stack != nil { lineChartOpt.Stack = *d.Stack } lineOpt = append(lineOpt, charts.WithLineChartOpts(lineChartOpt)) lineOpt = append(lineOpt, charts.WithAreaStyleOpts(opts.AreaStyle{ Opacity: opts.Float(0.4), })) if d.Color != nil { lineOpt = append(lineOpt, charts.WithItemStyleOpts(opts.ItemStyle{ Color: *d.Color, // 自定义每个系列颜色 })) } line.AddSeries(d.Legend, d.Data, lineOpt...) } return line }