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 PowerFlowChartOpt struct { Global ChartOpt } type PowerFlowChartData struct { Legend string // 图例名称 Color *string // 图例颜色 Stack *string // 图例堆叠名称,相同的名称会堆叠到一起 Data []opts.LineData } type SocChartData struct { Color *string // 图例颜色 Data []opts.LineData } func CreatePowerFlowChart(opt LineChartOpt, powerFlowData []PowerFlowChartData, socData SocChartData) *charts.Line { pfChart := charts.NewLine() pfChart.SetGlobalOptions( charts.WithInitializationOpts(opts.Initialization{ Theme: types.ThemeShine, Width: "1280px", Height: "500px", }), charts.WithGridOpts( opts.Grid{Top: "60", Height: "35%"}, // 上图 grid opts.Grid{Top: "55%", Height: "35%"}, // 下图 grid ), charts.WithTooltipOpts(opts.Tooltip{ Trigger: "axis", AxisPointer: &opts.AxisPointer{Type: "cross"}, BackgroundColor: "#ffffff", // 白色背景,不透明 BorderColor: "#333333", }), charts.WithXAxisOpts(opts.XAxis{ Type: "time", // ⏰ 时间轴关键设置 Show: opts.Bool(false), // 上图隐藏 X 轴标签 GridIndex: 0, }), charts.WithYAxisOpts(opts.YAxis{ Name: "功率(kw)", GridIndex: 0, }), charts.WithLegendOpts(opts.Legend{ Show: opts.Bool(true), }), charts.WithDataZoomOpts( opts.DataZoom{ Type: "slider", XAxisIndex: []int{0, 1}, Start: 0, End: 100, }, opts.DataZoom{ Type: "inside", XAxisIndex: []int{0, 1}, Start: 0, End: 100, }, ), ) pfChart.ExtendXAxis(opts.XAxis{ Type: "time", GridIndex: 1, }) pfChart.ExtendYAxis(opts.YAxis{ Name: "SOC(%)", GridIndex: 1, }) // 插入上图(功率)数据 for _, d := range powerFlowData { areaOpt := []charts.SeriesOpts{} areaChartOpt := opts.LineChart{} areaChartOpt.Smooth = opts.Bool(true) areaChartOpt.Symbol = "none" if d.Stack != nil { areaChartOpt.Stack = *d.Stack } areaChartOpt.YAxisIndex = 0 areaChartOpt.XAxisIndex = 0 areaOpt = append(areaOpt, charts.WithLineChartOpts(areaChartOpt)) areaOpt = append(areaOpt, charts.WithAreaStyleOpts(opts.AreaStyle{ Opacity: opts.Float(0.4), })) if d.Color != nil { areaOpt = append(areaOpt, charts.WithItemStyleOpts(opts.ItemStyle{ Color: *d.Color, // 自定义每个系列颜色 })) } pfChart.AddSeries(d.Legend, d.Data, areaOpt...) } // 插入下图(SOC)数据 lineOpt := []charts.SeriesOpts{} lineOpt = append(lineOpt, charts.WithLineChartOpts(opts.LineChart{ Smooth: opts.Bool(true), Symbol: "none", YAxisIndex: 1, XAxisIndex: 1, })) if socData.Color != nil { lineOpt = append(lineOpt, charts.WithItemStyleOpts(opts.ItemStyle{ Color: *socData.Color, // 自定义每个系列颜色 })) } pfChart.AddSeries("SOC", socData.Data, lineOpt...) return pfChart }