line.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package echart
  2. import (
  3. "github.com/go-echarts/go-echarts/v2/charts"
  4. "github.com/go-echarts/go-echarts/v2/opts"
  5. "github.com/go-echarts/go-echarts/v2/types"
  6. )
  7. type LineChartOpt struct {
  8. Global ChartOpt
  9. Smooth bool // 是否平滑过度
  10. }
  11. type LineChartData struct {
  12. Legend string // 图例名称
  13. Color *string // 图例颜色
  14. Stack *string // 图例堆叠名称,相同的名称会堆叠到一起
  15. Data []opts.LineData
  16. }
  17. func LineSmoothArea(opt LineChartOpt, data []LineChartData) *charts.Line {
  18. line := charts.NewLine()
  19. line.SetGlobalOptions(
  20. charts.WithInitializationOpts(opts.Initialization{
  21. Theme: types.ThemeShine,
  22. Width: "1280px",
  23. Height: "500px",
  24. }),
  25. charts.WithTitleOpts(opts.Title{
  26. Title: opt.Global.Title,
  27. Subtitle: opt.Global.Subtitle,
  28. }),
  29. charts.WithTooltipOpts(opts.Tooltip{
  30. Trigger: "axis",
  31. }),
  32. charts.WithXAxisOpts(opts.XAxis{
  33. Type: "time", // ⏰ 时间轴关键设置
  34. }),
  35. charts.WithLegendOpts(opts.Legend{
  36. Show: opts.Bool(true),
  37. }),
  38. )
  39. for _, d := range data {
  40. lineOpt := []charts.SeriesOpts{}
  41. lineChartOpt := opts.LineChart{}
  42. lineChartOpt.Smooth = opts.Bool(opt.Smooth)
  43. if d.Stack != nil {
  44. lineChartOpt.Stack = *d.Stack
  45. }
  46. lineOpt = append(lineOpt, charts.WithLineChartOpts(lineChartOpt))
  47. lineOpt = append(lineOpt, charts.WithAreaStyleOpts(opts.AreaStyle{
  48. Opacity: opts.Float(0.4),
  49. }))
  50. if d.Color != nil {
  51. lineOpt = append(lineOpt, charts.WithItemStyleOpts(opts.ItemStyle{
  52. Color: *d.Color, // 自定义每个系列颜色
  53. }))
  54. }
  55. line.AddSeries(d.Legend, d.Data, lineOpt...)
  56. }
  57. return line
  58. }