| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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
- }
|