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 }