github.com/serge-v/zero@v1.0.2-0.20220911142406-af4b6a19e68a/examples/chart/chart.go (about)

     1  package main
     2  
     3  import (
     4  	"log"
     5  	"time"
     6  
     7  	"github.com/kelvins/sunrisesunset"
     8  	"github.com/wcharczuk/go-chart/v2"
     9  	"github.com/wcharczuk/go-chart/v2/drawing"
    10  )
    11  
    12  // creates 6 hours grid with NYC sunrise and sunset lines.
    13  func dayEventsLines() []chart.GridLine {
    14  	var list []chart.GridLine
    15  	y, m, d := time.Now().Date()
    16  	start := time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
    17  
    18  	for i := 0; i < 5; i++ {
    19  		ts := start.Add(time.Hour * 24 * time.Duration(-i))
    20  		line := chart.GridLine{
    21  			Value: chart.TimeToFloat64(ts),
    22  			Style: chart.Style{StrokeColor: drawing.ColorRed},
    23  		}
    24  		list = append(list, line)
    25  	}
    26  
    27  	start = time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
    28  
    29  	for i := 0; i < 5; i++ {
    30  		ts := start.Add(time.Hour * 24 * time.Duration(-i))
    31  
    32  		// midnight: black
    33  		line := chart.GridLine{
    34  			Value: chart.TimeToFloat64(ts),
    35  			Style: chart.Style{StrokeColor: drawing.ColorBlack, StrokeWidth: 2},
    36  		}
    37  		list = append(list, line)
    38  
    39  		// 6AM: blue
    40  		ts = start.Add(time.Hour*24*time.Duration(-i) + time.Hour*6)
    41  		line = chart.GridLine{
    42  			Value: chart.TimeToFloat64(ts),
    43  			Style: chart.Style{StrokeColor: drawing.ColorBlue, StrokeWidth: 0.5},
    44  		}
    45  		list = append(list, line)
    46  
    47  		// 6PM: blue
    48  		ts = start.Add(time.Hour*24*time.Duration(-i) + time.Hour*18)
    49  		line = chart.GridLine{
    50  			Value: chart.TimeToFloat64(ts),
    51  			Style: chart.Style{StrokeColor: drawing.ColorBlue, StrokeWidth: 0.5},
    52  		}
    53  		list = append(list, line)
    54  
    55  		// 12PM: pink
    56  		ts = start.Add(time.Hour*24*time.Duration(-i) + time.Hour*12)
    57  		line = chart.GridLine{
    58  			Value: chart.TimeToFloat64(ts),
    59  			Style: chart.Style{StrokeColor: drawing.ColorFromHex("FFC0CB"), StrokeWidth: 2},
    60  		}
    61  		list = append(list, line)
    62  
    63  		p := sunrisesunset.Parameters{
    64  			Latitude:  41,
    65  			Longitude: -74,
    66  			UtcOffset: -4.0,
    67  			Date:      ts,
    68  		}
    69  
    70  		sunrise, sunset, err := p.GetSunriseSunset()
    71  		if err != nil {
    72  			log.Fatal(err)
    73  		}
    74  
    75  		line = chart.GridLine{
    76  			Value: chart.TimeToFloat64(sunrise),
    77  			Style: chart.Style{StrokeColor: drawing.ColorFromHex("f5f242")},
    78  		}
    79  		list = append(list, line)
    80  
    81  		line = chart.GridLine{
    82  			Value: chart.TimeToFloat64(sunset),
    83  			Style: chart.Style{StrokeColor: drawing.ColorFromHex("f5a742")},
    84  		}
    85  		list = append(list, line)
    86  
    87  	}
    88  
    89  	return list
    90  }
    91  
    92  func xTicks() []chart.Tick {
    93  	var list []chart.Tick
    94  	y, m, d := time.Now().Date()
    95  	start := time.Date(y, m, d, 0, 0, 0, 0, time.UTC)
    96  
    97  	for i := 0; i < 5; i++ {
    98  		ts := start.Add(time.Hour * 24 * time.Duration(-i))
    99  
   100  		line := chart.Tick{
   101  			Value: chart.TimeToFloat64(ts),
   102  			Label: ts.Format("1/02"),
   103  		}
   104  		list = append(list, line)
   105  
   106  		ts6 := ts.Add(time.Hour * 6)
   107  		line = chart.Tick{
   108  			Value: chart.TimeToFloat64(ts6),
   109  			Label: ts6.Format("15"),
   110  		}
   111  		list = append(list, line)
   112  
   113  		ts12 := ts.Add(time.Hour * 12)
   114  		line = chart.Tick{
   115  			Value: chart.TimeToFloat64(ts12),
   116  			Label: ts12.Format("15"),
   117  		}
   118  		list = append(list, line)
   119  
   120  		ts18 := ts.Add(time.Hour * 18)
   121  		line = chart.Tick{
   122  			Value: chart.TimeToFloat64(ts18),
   123  			Label: ts18.Format("15"),
   124  		}
   125  		list = append(list, line)
   126  	}
   127  
   128  	return list
   129  }