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:
gizak 2016-01-27 14:12:43 -05:00
parent dada0699b6
commit 08a5d3f67b

View File

@ -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++ {