Negative numbers are suppressed as zeros. The height of each data point is based off zero, so it will be confusing when it comes to negative numbers. Simply treat negative values data points as zeroes.
This commit is contained in:
15
sparkline.go
15
sparkline.go
@@ -4,9 +4,7 @@
|
|||||||
|
|
||||||
package termui
|
package termui
|
||||||
|
|
||||||
import "math"
|
// Sparkline is like: ▅▆▂▂▅▇▂▂▃▆▆▆▅▃. The data points should be non-negative integers.
|
||||||
|
|
||||||
// Sparkline is like: ▅▆▂▂▅▇▂▂▃▆▆▆▅▃
|
|
||||||
/*
|
/*
|
||||||
data := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1}
|
data := []int{4, 2, 1, 6, 3, 9, 1, 4, 2, 15, 14, 9, 8, 6, 10, 13, 15, 12, 10, 5, 3, 6, 1}
|
||||||
spl := termui.NewSparkline()
|
spl := termui.NewSparkline()
|
||||||
@@ -84,14 +82,18 @@ func (sl *Sparklines) update() {
|
|||||||
for i := 0; i < sl.displayLines; i++ {
|
for i := 0; i < sl.displayLines; i++ {
|
||||||
data := sl.Lines[i].Data
|
data := sl.Lines[i].Data
|
||||||
|
|
||||||
max := math.MinInt32
|
max := 0
|
||||||
for _, v := range data {
|
for _, v := range data {
|
||||||
if max < v {
|
if max < v {
|
||||||
max = v
|
max = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sl.Lines[i].max = max
|
sl.Lines[i].max = max
|
||||||
|
if max != 0 {
|
||||||
sl.Lines[i].scale = float32(8*sl.Lines[i].Height) / float32(max)
|
sl.Lines[i].scale = float32(8*sl.Lines[i].Height) / float32(max)
|
||||||
|
} else { // when all negative
|
||||||
|
sl.Lines[i].scale = 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -127,7 +129,12 @@ func (sl *Sparklines) Buffer() Buffer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for j, v := range data {
|
for j, v := range data {
|
||||||
|
// display height of the data point, zero when data is negative
|
||||||
h := int(float32(v)*l.scale + 0.5)
|
h := int(float32(v)*l.scale + 0.5)
|
||||||
|
if v < 0 {
|
||||||
|
h = 0
|
||||||
|
}
|
||||||
|
|
||||||
barCnt := h / 8
|
barCnt := h / 8
|
||||||
barMod := h % 8
|
barMod := h % 8
|
||||||
for jj := 0; jj < barCnt; jj++ {
|
for jj := 0; jj < barCnt; jj++ {
|
||||||
|
|||||||
Reference in New Issue
Block a user