Added BaseValue funtionality to bar chart (#94)
This commit is contained in:
parent
d667b8c983
commit
3edccc4758
3 changed files with 105 additions and 5 deletions
88
_examples/bar_chart_base_value/main.go
Normal file
88
_examples/bar_chart_base_value/main.go
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/wcharczuk/go-chart"
|
||||||
|
"github.com/wcharczuk/go-chart/drawing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func drawChart(res http.ResponseWriter, req *http.Request) {
|
||||||
|
profitStyle := chart.Style{
|
||||||
|
Show: true,
|
||||||
|
FillColor: drawing.ColorFromHex("13c158"),
|
||||||
|
StrokeColor: drawing.ColorFromHex("13c158"),
|
||||||
|
StrokeWidth: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
lossStyle := chart.Style{
|
||||||
|
Show: true,
|
||||||
|
FillColor: drawing.ColorFromHex("c11313"),
|
||||||
|
StrokeColor: drawing.ColorFromHex("c11313"),
|
||||||
|
StrokeWidth: 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
sbc := chart.BarChart{
|
||||||
|
Title: "Bar Chart Using BaseValue",
|
||||||
|
TitleStyle: chart.StyleShow(),
|
||||||
|
Background: chart.Style{
|
||||||
|
Padding: chart.Box{
|
||||||
|
Top: 40,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Height: 512,
|
||||||
|
BarWidth: 60,
|
||||||
|
XAxis: chart.Style{
|
||||||
|
Show: true,
|
||||||
|
},
|
||||||
|
YAxis: chart.YAxis{
|
||||||
|
Style: chart.Style{
|
||||||
|
Show: true,
|
||||||
|
},
|
||||||
|
Ticks: []chart.Tick{
|
||||||
|
{-4.0, "-4"},
|
||||||
|
{-2.0, "-2"},
|
||||||
|
{0, "0"},
|
||||||
|
{2.0, "2"},
|
||||||
|
{4.0, "4"},
|
||||||
|
{6.0, "6"},
|
||||||
|
{8.0, "8"},
|
||||||
|
{10.0, "10"},
|
||||||
|
{12.0, "12"},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
UseBaseValue: true,
|
||||||
|
BaseValue: 0.0,
|
||||||
|
Bars: []chart.Value{
|
||||||
|
{Value: 10.0, Style: profitStyle, Label: "Profit"},
|
||||||
|
{Value: 12.0, Style: profitStyle, Label: "More Profit"},
|
||||||
|
{Value: 8.0, Style: profitStyle, Label: "Still Profit"},
|
||||||
|
{Value: -4.0, Style: lossStyle, Label: "Loss!"},
|
||||||
|
{Value: 3.0, Style: profitStyle, Label: "Phew Ok"},
|
||||||
|
{Value: -2.0, Style: lossStyle, Label: "Oh No!"},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
res.Header().Set("Content-Type", "image/png")
|
||||||
|
err := sbc.Render(chart.PNG, res)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Printf("Error rendering chart: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func port() string {
|
||||||
|
if len(os.Getenv("PORT")) > 0 {
|
||||||
|
return os.Getenv("PORT")
|
||||||
|
}
|
||||||
|
return "8080"
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
listenPort := fmt.Sprintf(":%s", port())
|
||||||
|
fmt.Printf("Listening on %s\n", listenPort)
|
||||||
|
http.HandleFunc("/", drawChart)
|
||||||
|
log.Fatal(http.ListenAndServe(listenPort, nil))
|
||||||
|
}
|
BIN
_examples/bar_chart_base_value/output.png
Normal file
BIN
_examples/bar_chart_base_value/output.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
12
bar_chart.go
12
bar_chart.go
|
@ -31,6 +31,9 @@ type BarChart struct {
|
||||||
|
|
||||||
BarSpacing int
|
BarSpacing int
|
||||||
|
|
||||||
|
UseBaseValue bool
|
||||||
|
BaseValue float64
|
||||||
|
|
||||||
Font *truetype.Font
|
Font *truetype.Font
|
||||||
defaultFont *truetype.Font
|
defaultFont *truetype.Font
|
||||||
|
|
||||||
|
@ -199,12 +202,21 @@ func (bc BarChart) drawBars(r Renderer, canvasBox Box, yr Range) {
|
||||||
|
|
||||||
by = canvasBox.Bottom - yr.Translate(bar.Value)
|
by = canvasBox.Bottom - yr.Translate(bar.Value)
|
||||||
|
|
||||||
|
if bc.UseBaseValue {
|
||||||
|
barBox = Box{
|
||||||
|
Top: by,
|
||||||
|
Left: bxl,
|
||||||
|
Right: bxr,
|
||||||
|
Bottom: canvasBox.Bottom - yr.Translate(bc.BaseValue),
|
||||||
|
}
|
||||||
|
} else {
|
||||||
barBox = Box{
|
barBox = Box{
|
||||||
Top: by,
|
Top: by,
|
||||||
Left: bxl,
|
Left: bxl,
|
||||||
Right: bxr,
|
Right: bxr,
|
||||||
Bottom: canvasBox.Bottom,
|
Bottom: canvasBox.Bottom,
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Draw.Box(r, barBox, bar.Style.InheritFrom(bc.styleDefaultsBar(index)))
|
Draw.Box(r, barBox, bar.Style.InheritFrom(bc.styleDefaultsBar(index)))
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue