Add time labels to X axis

pull/184/head
Simon Roberts 3 years ago
parent c0c514ba3f
commit 6e99e9100f
No known key found for this signature in database
GPG Key ID: 0F30F99E6B771FD4

@ -177,6 +177,7 @@ func (ct *Cointop) ChartPoints(symbol string, name string) error {
newStart := time.Unix(start, 0).Add(timeQuantum)
newEnd := time.Unix(end, 0).Add(-timeQuantum)
timeData := timedata.ResampleTimeSeriesData(cacheData, float64(newStart.UnixMilli()), float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX))
labels := timedata.BuildTimeSeriesLabels(timeData)
// Extract just the values from the data
var data []float64
@ -189,6 +190,7 @@ func (ct *Cointop) ChartPoints(symbol string, name string) error {
}
chart.SetData(data)
chart.SetDataLabels(labels)
ct.State.chartPoints = chart.GetChartPoints(maxX)
return nil
@ -285,8 +287,12 @@ func (ct *Cointop) PortfolioChart() error {
// Resample and sum data
var data []float64
for _, cacheData := range allCacheData {
var labels []string
for i, cacheData := range allCacheData {
coinData := timedata.ResampleTimeSeriesData(cacheData.data, float64(newStart.UnixMilli()), float64(newEnd.UnixMilli()), chart.GetChartDataSize(maxX))
if i == 0 {
labels = timedata.BuildTimeSeriesLabels(coinData)
}
// sum (excluding NaN)
for i := range coinData {
price := coinData[i][1]
@ -313,6 +319,7 @@ func (ct *Cointop) PortfolioChart() error {
}
chart.SetData(data)
chart.SetDataLabels(labels)
ct.State.chartPoints = chart.GetChartPoints(maxX)
return nil

@ -55,6 +55,11 @@ func (c *ChartPlot) SetData(data []float64) {
c.t.Data = data
}
// SetDataLabels ...
func (c *ChartPlot) SetDataLabels(labels []string) {
c.t.DataLabels = labels
}
// GetChartDataSize ...
func (c *ChartPlot) GetChartDataSize(width int) int {
axisYWidth := 30

@ -8,7 +8,7 @@ import (
log "github.com/sirupsen/logrus"
)
// Resample the [timestamp,value] data given to numsteps between start-end (returns numSteps+1 points).
// ResampleTimeSeriesData resamples the given [timestamp,value] data to numsteps between start-end (returns numSteps+1 points).
// If the data does not extend past start/end then there will likely be NaN in the output data.
func ResampleTimeSeriesData(data [][]float64, start float64, end float64, numSteps int) [][]float64 {
var newData [][]float64
@ -33,7 +33,7 @@ func ResampleTimeSeriesData(data [][]float64, start float64, end float64, numSte
return newData
}
// Assuming that the [timestamp,value] data provided is roughly evenly spaced, calculate that interval.
// CalculateTimeQuantum determines the given [timestamp,value] data
func CalculateTimeQuantum(data [][]float64) time.Duration {
if len(data) > 1 {
minTime := time.UnixMilli(int64(data[0][0]))
@ -43,9 +43,26 @@ func CalculateTimeQuantum(data [][]float64) time.Duration {
return 0
}
// Print out all the [timestamp,value] data provided
func DebugLogPriceData(data [][]float64) {
// BuildTimeSeriesLabels returns a list of short labels representing time values from the given [timestamp,value] data
func BuildTimeSeriesLabels(data [][]float64) []string {
minTime := time.UnixMilli(int64(data[0][0]))
maxTime := time.UnixMilli(int64(data[len(data)-1][0]))
timeRange := maxTime.Sub(minTime)
log.Debugf("XXX BuildTimeSeriesLabels %s to %s = %s", minTime, maxTime, timeRange)
var timeFormat string
if timeRange.Hours() < 24 {
timeFormat = "15:04"
} else if timeRange.Hours() < 24*7 {
timeFormat = "Mon 15:04"
} else if timeRange.Hours() < 24*365 {
timeFormat = "02-Jan"
} else {
timeFormat = "Jan 2006"
}
var labels []string
for i := range data {
log.Debugf("%s %.2f", time.Unix(int64(data[i][0]/1000), 0), data[i][1])
labels = append(labels, time.UnixMilli(int64(data[i][0])).Format(timeFormat))
}
return labels
}

Loading…
Cancel
Save