From 41a2f19f1205319614f760a1cf759d096fc0fd04 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 18 May 2025 07:17:02 +0200 Subject: [PATCH] Adding upstream version 2.1.2. Signed-off-by: Daniel Baumann --- .github/workflows/ci.yml | 33 + .gitignore | 20 + COVERAGE | 1 + LICENSE | 21 + Makefile | 10 + PROFANITY_RULES.yml | 4 + README.md | 95 +++ _colors/colors_extended.txt | 147 +++++ _images/bar_chart.png | Bin 0 -> 16830 bytes _images/goog_ltm.png | Bin 0 -> 51240 bytes _images/ma_goog_ltm.png | Bin 0 -> 101524 bytes _images/pie_chart.png | Bin 0 -> 32994 bytes _images/spy_ltm_bbs.png | Bin 0 -> 79752 bytes _images/stacked_bar.png | Bin 0 -> 16957 bytes _images/tvix_ltm.png | Bin 0 -> 8758 bytes _images/two_axis.png | Bin 0 -> 90543 bytes annotation_series.go | 91 +++ annotation_series_test.go | 115 ++++ array.go | 24 + axis.go | 45 ++ bar_chart.go | 491 +++++++++++++++ bar_chart_test.go | 310 ++++++++++ bollinger_band_series.go | 135 ++++ bollinger_band_series_test.go | 52 ++ bounded_last_values_annotation_series.go | 36 ++ box.go | 367 +++++++++++ box_test.go | 188 ++++++ chart.go | 577 +++++++++++++++++ chart_test.go | 594 ++++++++++++++++++ cmd/chart/main.go | 148 +++++ colors.go | 184 ++++++ concat_series.go | 44 ++ concat_series_test.go | 41 ++ continuous_range.go | 81 +++ continuous_range_test.go | 22 + continuous_series.go | 96 +++ continuous_series_test.go | 72 +++ defaults.go | 103 ++++ donut_chart.go | 315 ++++++++++ donut_chart_test.go | 69 +++ draw.go | 325 ++++++++++ drawing/README.md | 5 + drawing/color.go | 274 +++++++++ drawing/color_test.go | 114 ++++ drawing/constants.go | 6 + drawing/curve.go | 185 ++++++ drawing/curve_test.go | 35 ++ drawing/dasher.go | 89 +++ drawing/demux_flattener.go | 41 ++ drawing/drawing.go | 148 +++++ drawing/flattener.go | 97 +++ drawing/free_type_path.go | 30 + drawing/graphic_context.go | 82 +++ drawing/image_filter.go | 13 + drawing/line.go | 48 ++ drawing/matrix.go | 220 +++++++ drawing/painter.go | 31 + drawing/path.go | 186 ++++++ drawing/raster_graphic_context.go | 283 +++++++++ drawing/stack_graphic_context.go | 211 +++++++ drawing/stroker.go | 85 +++ drawing/text.go | 67 ++ drawing/transformer.go | 39 ++ drawing/util.go | 68 ++ ema_series.go | 131 ++++ ema_series_test.go | 105 ++++ examples/annotations/main.go | 44 ++ examples/annotations/output.png | Bin 0 -> 26163 bytes examples/axes/main.go | 34 + examples/axes/output.png | Bin 0 -> 22406 bytes examples/axes_labels/main.go | 40 ++ examples/axes_labels/output.png | Bin 0 -> 24546 bytes examples/bar_chart/main.go | 35 ++ examples/bar_chart/output.png | Bin 0 -> 19152 bytes examples/bar_chart_base_value/main.go | 62 ++ examples/bar_chart_base_value/output.png | Bin 0 -> 18491 bytes examples/basic/main.go | 23 + examples/basic/output.png | Bin 0 -> 24432 bytes examples/benchmark_line_charts/main.go | 52 ++ examples/benchmark_line_charts/output.png | Bin 0 -> 321567 bytes examples/css_classes/main.go | 59 ++ examples/custom_formatters/main.go | 38 ++ examples/custom_formatters/output.png | Bin 0 -> 29669 bytes examples/custom_padding/main.go | 34 + examples/custom_padding/output.png | Bin 0 -> 66998 bytes examples/custom_ranges/main.go | 34 + examples/custom_ranges/output.png | Bin 0 -> 20407 bytes examples/custom_styles/main.go | 38 ++ examples/custom_styles/output.png | Bin 0 -> 23960 bytes examples/custom_stylesheets/inlineOutput.svg | 21 + examples/custom_stylesheets/main.go | 88 +++ examples/custom_ticks/main.go | 42 ++ examples/custom_ticks/output.png | Bin 0 -> 17745 bytes examples/descending/main.go | 49 ++ examples/descending/output.png | Bin 0 -> 19720 bytes examples/donut_chart/main.go | 28 + examples/donut_chart/output.png | Bin 0 -> 24439 bytes examples/donut_chart/reg.svg | 25 + examples/horizontal_stacked_bar/main.go | 222 +++++++ examples/horizontal_stacked_bar/output.png | Bin 0 -> 34357 bytes examples/image_writer/main.go | 27 + examples/legend/main.go | 43 ++ examples/legend/output.png | Bin 0 -> 24548 bytes examples/legend_left/main.go | 103 ++++ examples/legend_left/output.png | Bin 0 -> 44943 bytes examples/linear_regression/main.go | 40 ++ examples/linear_regression/output.png | Bin 0 -> 72724 bytes examples/logarithmic_axes/main.go | 41 ++ examples/logarithmic_axes/output.png | Bin 0 -> 16711 bytes examples/min_max/main.go | 61 ++ examples/min_max/output.png | Bin 0 -> 172334 bytes examples/pie_chart/main.go | 29 + examples/pie_chart/output.png | Bin 0 -> 34705 bytes examples/pie_chart/reg.svg | 17 + examples/poly_regression/main.go | 39 ++ examples/poly_regression/output.png | Bin 0 -> 77622 bytes examples/request_timings/main.go | 133 ++++ examples/request_timings/output.png | Bin 0 -> 119285 bytes examples/request_timings/requests.csv | 170 +++++ examples/rerender/main.go | 48 ++ examples/scatter/main.go | 69 +++ examples/scatter/output.png | Bin 0 -> 26902 bytes examples/simple_moving_average/main.go | 34 + examples/simple_moving_average/output.png | Bin 0 -> 81566 bytes examples/stacked_bar/main.go | 53 ++ examples/stacked_bar/output.png | Bin 0 -> 17048 bytes examples/stacked_bar_labels/main.go | 221 +++++++ examples/stacked_bar_labels/output.png | Bin 0 -> 25482 bytes examples/stock_analysis/main.go | 78 +++ examples/stock_analysis/output.png | Bin 0 -> 67905 bytes examples/text_rotation/main.go | 51 ++ examples/text_rotation/output.png | Bin 0 -> 8778 bytes examples/timeseries/main.go | 79 +++ examples/timeseries/output.png | Bin 0 -> 14919 bytes examples/twoaxis/main.go | 45 ++ examples/twoaxis/output.png | Bin 0 -> 37292 bytes examples/twopoint/main.go | 63 ++ examples/twopoint/output.png | Bin 0 -> 41199 bytes fileutil.go | 49 ++ first_value_annotation.go | 37 ++ first_value_annotation_test.go | 22 + font.go | 29 + go.mod | 8 + go.sum | 64 ++ grid_line.go | 72 +++ grid_line_test.go | 24 + histogram_series.go | 67 ++ histogram_series_test.go | 31 + image_writer.go | 42 ++ jet.go | 33 + last_value_annotation_series.go | 37 ++ last_value_annotation_series_test.go | 22 + legend.go | 331 ++++++++++ legend_test.go | 31 + linear_coefficient_provider.go | 42 ++ linear_regression_series.go | 187 ++++++ linear_regression_series_test.go | 77 +++ linear_sequence.go | 73 +++ linear_series.go | 119 ++++ logarithmic_range.go | 94 +++ logarithmic_range_test.go | 43 ++ logger.go | 148 +++++ macd_series.go | 338 ++++++++++ macd_series_test.go | 88 +++ mathutil.go | 252 ++++++++ matrix/matrix.go | 592 ++++++++++++++++++ matrix/matrix_test.go | 396 ++++++++++++ matrix/regression.go | 45 ++ matrix/regression_test.go | 22 + matrix/util.go | 36 ++ matrix/vector.go | 17 + min_max_series.go | 138 +++++ parse.go | 40 ++ percent_change_series.go | 89 +++ percent_change_series_test.go | 35 ++ pie_chart.go | 311 ++++++++++ pie_chart_test.go | 69 +++ polynomial_regression_series.go | 177 ++++++ polynomial_regression_test.go | 35 ++ random_sequence.go | 92 +++ range.go | 43 ++ raster_renderer.go | 230 +++++++ renderable.go | 4 + renderer.go | 89 +++ renderer_provider.go | 4 + roboto/roboto.go | 5 + seq.go | 275 +++++++++ seq_test.go | 136 ++++ series.go | 10 + sma_series.go | 120 ++++ sma_series_test.go | 111 ++++ stacked_bar_chart.go | 616 +++++++++++++++++++ stringutil.go | 57 ++ stringutil_test.go | 22 + style.go | 480 +++++++++++++++ style_test.go | 214 +++++++ testutil/helpers.go | 216 +++++++ text.go | 166 +++++ text_test.go | 60 ++ tick.go | 115 ++++ tick_test.go | 60 ++ time_series.go | 91 +++ time_series_test.go | 69 +++ times.go | 46 ++ timeutil.go | 150 +++++ value.go | 53 ++ value_buffer.go | 220 +++++++ value_buffer_test.go | 192 ++++++ value_formatter.go | 110 ++++ value_formatter_provider.go | 6 + value_formatter_test.go | 64 ++ value_provider.go | 51 ++ value_test.go | 69 +++ vector_renderer.go | 365 +++++++++++ vector_renderer_test.go | 117 ++++ viridis.go | 269 ++++++++ xaxis.go | 208 +++++++ xaxis_test.go | 67 ++ yaxis.go | 234 +++++++ yaxis_test.go | 85 +++ 220 files changed, 19814 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 .gitignore create mode 100644 COVERAGE create mode 100644 LICENSE create mode 100644 Makefile create mode 100644 PROFANITY_RULES.yml create mode 100644 README.md create mode 100644 _colors/colors_extended.txt create mode 100644 _images/bar_chart.png create mode 100644 _images/goog_ltm.png create mode 100644 _images/ma_goog_ltm.png create mode 100644 _images/pie_chart.png create mode 100644 _images/spy_ltm_bbs.png create mode 100644 _images/stacked_bar.png create mode 100644 _images/tvix_ltm.png create mode 100644 _images/two_axis.png create mode 100644 annotation_series.go create mode 100644 annotation_series_test.go create mode 100644 array.go create mode 100644 axis.go create mode 100644 bar_chart.go create mode 100644 bar_chart_test.go create mode 100644 bollinger_band_series.go create mode 100644 bollinger_band_series_test.go create mode 100644 bounded_last_values_annotation_series.go create mode 100644 box.go create mode 100644 box_test.go create mode 100644 chart.go create mode 100644 chart_test.go create mode 100644 cmd/chart/main.go create mode 100644 colors.go create mode 100644 concat_series.go create mode 100644 concat_series_test.go create mode 100644 continuous_range.go create mode 100644 continuous_range_test.go create mode 100644 continuous_series.go create mode 100644 continuous_series_test.go create mode 100644 defaults.go create mode 100644 donut_chart.go create mode 100644 donut_chart_test.go create mode 100644 draw.go create mode 100644 drawing/README.md create mode 100644 drawing/color.go create mode 100644 drawing/color_test.go create mode 100644 drawing/constants.go create mode 100644 drawing/curve.go create mode 100644 drawing/curve_test.go create mode 100644 drawing/dasher.go create mode 100644 drawing/demux_flattener.go create mode 100644 drawing/drawing.go create mode 100644 drawing/flattener.go create mode 100644 drawing/free_type_path.go create mode 100644 drawing/graphic_context.go create mode 100644 drawing/image_filter.go create mode 100644 drawing/line.go create mode 100644 drawing/matrix.go create mode 100644 drawing/painter.go create mode 100644 drawing/path.go create mode 100644 drawing/raster_graphic_context.go create mode 100644 drawing/stack_graphic_context.go create mode 100644 drawing/stroker.go create mode 100644 drawing/text.go create mode 100644 drawing/transformer.go create mode 100644 drawing/util.go create mode 100644 ema_series.go create mode 100644 ema_series_test.go create mode 100644 examples/annotations/main.go create mode 100644 examples/annotations/output.png create mode 100644 examples/axes/main.go create mode 100644 examples/axes/output.png create mode 100644 examples/axes_labels/main.go create mode 100644 examples/axes_labels/output.png create mode 100644 examples/bar_chart/main.go create mode 100644 examples/bar_chart/output.png create mode 100644 examples/bar_chart_base_value/main.go create mode 100644 examples/bar_chart_base_value/output.png create mode 100644 examples/basic/main.go create mode 100644 examples/basic/output.png create mode 100644 examples/benchmark_line_charts/main.go create mode 100644 examples/benchmark_line_charts/output.png create mode 100644 examples/css_classes/main.go create mode 100644 examples/custom_formatters/main.go create mode 100644 examples/custom_formatters/output.png create mode 100644 examples/custom_padding/main.go create mode 100644 examples/custom_padding/output.png create mode 100644 examples/custom_ranges/main.go create mode 100644 examples/custom_ranges/output.png create mode 100644 examples/custom_styles/main.go create mode 100644 examples/custom_styles/output.png create mode 100644 examples/custom_stylesheets/inlineOutput.svg create mode 100644 examples/custom_stylesheets/main.go create mode 100644 examples/custom_ticks/main.go create mode 100644 examples/custom_ticks/output.png create mode 100644 examples/descending/main.go create mode 100644 examples/descending/output.png create mode 100644 examples/donut_chart/main.go create mode 100644 examples/donut_chart/output.png create mode 100644 examples/donut_chart/reg.svg create mode 100644 examples/horizontal_stacked_bar/main.go create mode 100644 examples/horizontal_stacked_bar/output.png create mode 100644 examples/image_writer/main.go create mode 100644 examples/legend/main.go create mode 100644 examples/legend/output.png create mode 100644 examples/legend_left/main.go create mode 100644 examples/legend_left/output.png create mode 100644 examples/linear_regression/main.go create mode 100644 examples/linear_regression/output.png create mode 100644 examples/logarithmic_axes/main.go create mode 100644 examples/logarithmic_axes/output.png create mode 100644 examples/min_max/main.go create mode 100644 examples/min_max/output.png create mode 100644 examples/pie_chart/main.go create mode 100644 examples/pie_chart/output.png create mode 100644 examples/pie_chart/reg.svg create mode 100644 examples/poly_regression/main.go create mode 100644 examples/poly_regression/output.png create mode 100644 examples/request_timings/main.go create mode 100644 examples/request_timings/output.png create mode 100644 examples/request_timings/requests.csv create mode 100644 examples/rerender/main.go create mode 100644 examples/scatter/main.go create mode 100644 examples/scatter/output.png create mode 100644 examples/simple_moving_average/main.go create mode 100644 examples/simple_moving_average/output.png create mode 100644 examples/stacked_bar/main.go create mode 100644 examples/stacked_bar/output.png create mode 100644 examples/stacked_bar_labels/main.go create mode 100644 examples/stacked_bar_labels/output.png create mode 100644 examples/stock_analysis/main.go create mode 100644 examples/stock_analysis/output.png create mode 100644 examples/text_rotation/main.go create mode 100644 examples/text_rotation/output.png create mode 100644 examples/timeseries/main.go create mode 100644 examples/timeseries/output.png create mode 100644 examples/twoaxis/main.go create mode 100644 examples/twoaxis/output.png create mode 100644 examples/twopoint/main.go create mode 100644 examples/twopoint/output.png create mode 100644 fileutil.go create mode 100644 first_value_annotation.go create mode 100644 first_value_annotation_test.go create mode 100644 font.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 grid_line.go create mode 100644 grid_line_test.go create mode 100644 histogram_series.go create mode 100644 histogram_series_test.go create mode 100644 image_writer.go create mode 100644 jet.go create mode 100644 last_value_annotation_series.go create mode 100644 last_value_annotation_series_test.go create mode 100644 legend.go create mode 100644 legend_test.go create mode 100644 linear_coefficient_provider.go create mode 100644 linear_regression_series.go create mode 100644 linear_regression_series_test.go create mode 100644 linear_sequence.go create mode 100644 linear_series.go create mode 100644 logarithmic_range.go create mode 100644 logarithmic_range_test.go create mode 100644 logger.go create mode 100644 macd_series.go create mode 100644 macd_series_test.go create mode 100644 mathutil.go create mode 100644 matrix/matrix.go create mode 100644 matrix/matrix_test.go create mode 100644 matrix/regression.go create mode 100644 matrix/regression_test.go create mode 100644 matrix/util.go create mode 100644 matrix/vector.go create mode 100644 min_max_series.go create mode 100644 parse.go create mode 100644 percent_change_series.go create mode 100644 percent_change_series_test.go create mode 100644 pie_chart.go create mode 100644 pie_chart_test.go create mode 100644 polynomial_regression_series.go create mode 100644 polynomial_regression_test.go create mode 100644 random_sequence.go create mode 100644 range.go create mode 100644 raster_renderer.go create mode 100644 renderable.go create mode 100644 renderer.go create mode 100644 renderer_provider.go create mode 100644 roboto/roboto.go create mode 100644 seq.go create mode 100644 seq_test.go create mode 100644 series.go create mode 100644 sma_series.go create mode 100644 sma_series_test.go create mode 100644 stacked_bar_chart.go create mode 100644 stringutil.go create mode 100644 stringutil_test.go create mode 100644 style.go create mode 100644 style_test.go create mode 100644 testutil/helpers.go create mode 100644 text.go create mode 100644 text_test.go create mode 100644 tick.go create mode 100644 tick_test.go create mode 100644 time_series.go create mode 100644 time_series_test.go create mode 100644 times.go create mode 100644 timeutil.go create mode 100644 value.go create mode 100644 value_buffer.go create mode 100644 value_buffer_test.go create mode 100644 value_formatter.go create mode 100644 value_formatter_provider.go create mode 100644 value_formatter_test.go create mode 100644 value_provider.go create mode 100644 value_test.go create mode 100644 vector_renderer.go create mode 100644 vector_renderer_test.go create mode 100644 viridis.go create mode 100644 xaxis.go create mode 100644 xaxis_test.go create mode 100644 yaxis.go create mode 100644 yaxis_test.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..b48761c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,33 @@ +name: "Continuous Integration" + +on: + workflow_dispatch: + push: + branches: [ main ] + paths: [ "*.go" ] + pull_request: + branches: [ main ] + paths: [ "*.go" ] + +jobs: + ci: + name: "Tests" + runs-on: ubuntu-latest + + env: + GOOS: "linux" + GOARCH: "amd64" + GO111MODULE: "on" + CGO_ENABLED: "0" + + steps: + - name: Set up Go + uses: actions/setup-go@v3 + with: + go-version: 1.21 + + - name: Check out go-incr + uses: actions/checkout@v3 + + - name: Run all tests + run: go test ./... diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f4388f --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Binaries for programs and plugins +*.exe +*.dll +*.so +*.dylib + +# Test binary, build with `go test -c` +*.test + +# Output of the go coverage tool, specifically when used with LiteIDE +*.out + +# Project-local glide cache, RE: https://github.com/Masterminds/glide/issues/736 +.glide/ + +# Other +.vscode +.DS_Store +coverage.html +.idea diff --git a/COVERAGE b/COVERAGE new file mode 100644 index 0000000..7e492f8 --- /dev/null +++ b/COVERAGE @@ -0,0 +1 @@ +29.02 \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8d9f1c5 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 William Charczuk. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..e0928c3 --- /dev/null +++ b/Makefile @@ -0,0 +1,10 @@ +all: new-install test + +new-install: + @go get -v -u ./... + +generate: + @go generate ./... + +test: + @go test ./... \ No newline at end of file diff --git a/PROFANITY_RULES.yml b/PROFANITY_RULES.yml new file mode 100644 index 0000000..1e6c803 --- /dev/null +++ b/PROFANITY_RULES.yml @@ -0,0 +1,4 @@ +go-sdk: + excludeFiles: [ "*_test.go" ] + importsContain: [ github.com/blend/go-sdk/* ] + description: "please don't use go-sdk in this repo" \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..dcadc9c --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +go-chart +======== +[![Continuous Integration](https://github.com/wcharczuk/go-chart/actions/workflows/ci.yml/badge.svg)](https://github.com/wcharczuk/go-chart/actions/workflows/ci.yml) [![Go Report Card](https://goreportcard.com/badge/github.com/wcharczuk/go-chart)](https://goreportcard.com/report/github.com/wcharczuk/go-chart) + +Package `chart` is a very simple golang native charting library that supports timeseries and continuous line charts. + +Master should now be on the v3.x codebase, which overhauls the api significantly. Per usual, see `examples` for more information. + +# Installation + +To install `chart` run the following: + +```bash +> go get github.com/wcharczuk/go-chart/v2@latest +``` + +Most of the components are interchangeable so feel free to crib whatever you want. + +# Output Examples + +Spark Lines: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/tvix_ltm.png) + +Single axis: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/goog_ltm.png) + +Two axis: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/two_axis.png) + +# Other Chart Types + +Pie Chart: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/pie_chart.png) + +The code for this chart can be found in `examples/pie_chart/main.go`. + +Stacked Bar: + +![](https://raw.githubusercontent.com/wcharczuk/go-chart/master/_images/stacked_bar.png) + +The code for this chart can be found in `examples/stacked_bar/main.go`. + +# Code Examples + +Actual chart configurations and examples can be found in the `./examples/` directory. They are simple CLI programs that write to `output.png` (they are also updated with `go generate`. + +# Usage + +Everything starts with the `chart.Chart` object. The bare minimum to draw a chart would be the following: + +```golang + +import ( + ... + "bytes" + ... + "github.com/wcharczuk/go-chart/v2" //exposes "chart" +) + +graph := chart.Chart{ + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0}, + }, + }, +} + +buffer := bytes.NewBuffer([]byte{}) +err := graph.Render(chart.PNG, buffer) +``` + +Explanation of the above: A `chart` can have many `Series`, a `Series` is a collection of things that need to be drawn according to the X range and the Y range(s). + +Here, we have a single series with x range values as float64s, rendered to a PNG. Note; we can pass any type of `io.Writer` into `Render(...)`, meaning that we can render the chart to a file or a resonse or anything else that implements `io.Writer`. + +# API Overview + +Everything on the `chart.Chart` object has defaults that can be overriden. Whenever a developer sets a property on the chart object, it is to be assumed that value will be used instead of the default. + +The best way to see the api in action is to look at the examples in the `./_examples/` directory. + +# Design Philosophy + +I wanted to make a charting library that used only native golang, that could be stood up on a server (i.e. it had built in fonts). + +The goal with the API itself is to have the "zero value be useful", and to require the user to not code more than they absolutely needed. + +# Contributions + +Contributions are welcome though this library is in a holding pattern for the forseable future. diff --git a/_colors/colors_extended.txt b/_colors/colors_extended.txt new file mode 100644 index 0000000..65cd288 --- /dev/null +++ b/_colors/colors_extended.txt @@ -0,0 +1,147 @@ +aliceblue #f0f8ff 240,248,255 +antiquewhite #faebd7 250,235,215 +aqua #00ffff 0,255,255 +aquamarine #7fffd4 127,255,212 +azure #f0ffff 240,255,255 +beige #f5f5dc 245,245,220 +bisque #ffe4c4 255,228,196 +black #000000 0,0,0 +blanchedalmond #ffebcd 255,235,205 +blue #0000ff 0,0,255 +blueviolet #8a2be2 138,43,226 +brown #a52a2a 165,42,42 +burlywood #deb887 222,184,135 +cadetblue #5f9ea0 95,158,160 +chartreuse #7fff00 127,255,0 +chocolate #d2691e 210,105,30 +coral #ff7f50 255,127,80 +cornflowerblue #6495ed 100,149,237 +cornsilk #fff8dc 255,248,220 +crimson #dc143c 220,20,60 +cyan #00ffff 0,255,255 +darkblue #00008b 0,0,139 +darkcyan #008b8b 0,139,139 +darkgoldenrod #b8860b 184,134,11 +darkgray #a9a9a9 169,169,169 +darkgreen #006400 0,100,0 +darkgrey #a9a9a9 169,169,169 +darkkhaki #bdb76b 189,183,107 +darkmagenta #8b008b 139,0,139 +darkolivegreen #556b2f 85,107,47 +darkorange #ff8c00 255,140,0 +darkorchid #9932cc 153,50,204 +darkred #8b0000 139,0,0 +darksalmon #e9967a 233,150,122 +darkseagreen #8fbc8f 143,188,143 +darkslateblue #483d8b 72,61,139 +darkslategray #2f4f4f 47,79,79 +darkslategrey #2f4f4f 47,79,79 +darkturquoise #00ced1 0,206,209 +darkviolet #9400d3 148,0,211 +deeppink #ff1493 255,20,147 +deepskyblue #00bfff 0,191,255 +dimgray #696969 105,105,105 +dimgrey #696969 105,105,105 +dodgerblue #1e90ff 30,144,255 +firebrick #b22222 178,34,34 +floralwhite #fffaf0 255,250,240 +forestgreen #228b22 34,139,34 +fuchsia #ff00ff 255,0,255 +gainsboro #dcdcdc 220,220,220 +ghostwhite #f8f8ff 248,248,255 +gold #ffd700 255,215,0 +goldenrod #daa520 218,165,32 +gray #808080 128,128,128 +green #008000 0,128,0 +greenyellow #adff2f 173,255,47 +grey #808080 128,128,128 +honeydew #f0fff0 240,255,240 +hotpink #ff69b4 255,105,180 +indianred #cd5c5c 205,92,92 +indigo #4b0082 75,0,130 +ivory #fffff0 255,255,240 +khaki #f0e68c 240,230,140 +lavender #e6e6fa 230,230,250 +lavenderblush #fff0f5 255,240,245 +lawngreen #7cfc00 124,252,0 +lemonchiffon #fffacd 255,250,205 +lightblue #add8e6 173,216,230 +lightcoral #f08080 240,128,128 +lightcyan #e0ffff 224,255,255 +lightgoldenrodyellow #fafad2 250,250,210 +lightgray #d3d3d3 211,211,211 +lightgreen #90ee90 144,238,144 +lightgrey #d3d3d3 211,211,211 +lightpink #ffb6c1 255,182,193 +lightsalmon #ffa07a 255,160,122 +lightseagreen #20b2aa 32,178,170 +lightskyblue #87cefa 135,206,250 +lightslategray #778899 119,136,153 +lightslategrey #778899 119,136,153 +lightsteelblue #b0c4de 176,196,222 +lightyellow #ffffe0 255,255,224 +lime #00ff00 0,255,0 +limegreen #32cd32 50,205,50 +linen #faf0e6 250,240,230 +magenta #ff00ff 255,0,255 +maroon #800000 128,0,0 +mediumaquamarine #66cdaa 102,205,170 +mediumblue #0000cd 0,0,205 +mediumorchid #ba55d3 186,85,211 +mediumpurple #9370db 147,112,219 +mediumseagreen #3cb371 60,179,113 +mediumslateblue #7b68ee 123,104,238 +mediumspringgreen #00fa9a 0,250,154 +mediumturquoise #48d1cc 72,209,204 +mediumvioletred #c71585 199,21,133 +midnightblue #191970 25,25,112 +mintcream #f5fffa 245,255,250 +mistyrose #ffe4e1 255,228,225 +moccasin #ffe4b5 255,228,181 +navajowhite #ffdead 255,222,173 +navy #000080 0,0,128 +oldlace #fdf5e6 253,245,230 +olive #808000 128,128,0 +olivedrab #6b8e23 107,142,35 +orange #ffa500 255,165,0 +orangered #ff4500 255,69,0 +orchid #da70d6 218,112,214 +palegoldenrod #eee8aa 238,232,170 +palegreen #98fb98 152,251,152 +paleturquoise #afeeee 175,238,238 +palevioletred #db7093 219,112,147 +papayawhip #ffefd5 255,239,213 +peachpuff #ffdab9 255,218,185 +peru #cd853f 205,133,63 +pink #ffc0cb 255,192,203 +plum #dda0dd 221,160,221 +powderblue #b0e0e6 176,224,230 +purple #800080 128,0,128 +red #ff0000 255,0,0 +rosybrown #bc8f8f 188,143,143 +royalblue #4169e1 65,105,225 +saddlebrown #8b4513 139,69,19 +salmon #fa8072 250,128,114 +sandybrown #f4a460 244,164,96 +seagreen #2e8b57 46,139,87 +seashell #fff5ee 255,245,238 +sienna #a0522d 160,82,45 +silver #c0c0c0 192,192,192 +skyblue #87ceeb 135,206,235 +slateblue #6a5acd 106,90,205 +slategray #708090 112,128,144 +slategrey #708090 112,128,144 +snow #fffafa 255,250,250 +springgreen #00ff7f 0,255,127 +steelblue #4682b4 70,130,180 +tan #d2b48c 210,180,140 +teal #008080 0,128,128 +thistle #d8bfd8 216,191,216 +tomato #ff6347 255,99,71 +turquoise #40e0d0 64,224,208 +violet #ee82ee 238,130,238 +wheat #f5deb3 245,222,179 +white #ffffff 255,255,255 +whitesmoke #f5f5f5 245,245,245 +yellow #ffff00 255,255,0 +yellowgreen #9acd32 154,205,50 \ No newline at end of file diff --git a/_images/bar_chart.png b/_images/bar_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..21c8fddf2e6f3b5144aeceb79180591536d4015d GIT binary patch literal 16830 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 literal 0 HcmV?d00001 diff --git a/_images/goog_ltm.png b/_images/goog_ltm.png new file mode 100644 index 0000000000000000000000000000000000000000..eae98c93d685f8c3e91a2fcf9a23416ac78bd9f5 GIT binary patch literal 51240 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

ccQ}8U7>J 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

m#>U?gw|y|j4^<_JNh^`Kn9 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 I1;?oW0@1$<@c;k- literal 0 HcmV?d00001 diff --git a/_images/tvix_ltm.png b/_images/tvix_ltm.png new file mode 100644 index 0000000000000000000000000000000000000000..473ba0950fd552be403f942177842d6fba3f7424 GIT binary patch literal 8758 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 G@BaZQRku+9 literal 0 HcmV?d00001 diff --git a/_images/two_axis.png b/_images/two_axis.png new file mode 100644 index 0000000000000000000000000000000000000000..2d19d2c9de441d97eb5f7c533210e984f8acdddb GIT binary patch literal 90543 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 Gp$P!2y(97f literal 0 HcmV?d00001 diff --git a/annotation_series.go b/annotation_series.go new file mode 100644 index 0000000..96e78f9 --- /dev/null +++ b/annotation_series.go @@ -0,0 +1,91 @@ +package chart + +import ( + "fmt" + "math" +) + +// Interface Assertions. +var ( + _ Series = (*AnnotationSeries)(nil) +) + +// AnnotationSeries is a series of labels on the chart. +type AnnotationSeries struct { + Name string + Style Style + YAxis YAxisType + Annotations []Value2 +} + +// GetName returns the name of the time series. +func (as AnnotationSeries) GetName() string { + return as.Name +} + +// GetStyle returns the line style. +func (as AnnotationSeries) GetStyle() Style { + return as.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (as AnnotationSeries) GetYAxis() YAxisType { + return as.YAxis +} + +func (as AnnotationSeries) annotationStyleDefaults(defaults Style) Style { + return Style{ + FontColor: DefaultTextColor, + Font: defaults.Font, + FillColor: DefaultAnnotationFillColor, + FontSize: DefaultAnnotationFontSize, + StrokeColor: defaults.StrokeColor, + StrokeWidth: defaults.StrokeWidth, + Padding: DefaultAnnotationPadding, + } +} + +// Measure returns a bounds box of the series. +func (as AnnotationSeries) Measure(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) Box { + box := Box{ + Top: math.MaxInt32, + Left: math.MaxInt32, + Right: 0, + Bottom: 0, + } + if !as.Style.Hidden { + seriesStyle := as.Style.InheritFrom(as.annotationStyleDefaults(defaults)) + for _, a := range as.Annotations { + style := a.Style.InheritFrom(seriesStyle) + lx := canvasBox.Left + xrange.Translate(a.XValue) + ly := canvasBox.Bottom - yrange.Translate(a.YValue) + ab := Draw.MeasureAnnotation(r, canvasBox, style, lx, ly, a.Label) + box.Top = MinInt(box.Top, ab.Top) + box.Left = MinInt(box.Left, ab.Left) + box.Right = MaxInt(box.Right, ab.Right) + box.Bottom = MaxInt(box.Bottom, ab.Bottom) + } + } + return box +} + +// Render draws the series. +func (as AnnotationSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + if !as.Style.Hidden { + seriesStyle := as.Style.InheritFrom(as.annotationStyleDefaults(defaults)) + for _, a := range as.Annotations { + style := a.Style.InheritFrom(seriesStyle) + lx := canvasBox.Left + xrange.Translate(a.XValue) + ly := canvasBox.Bottom - yrange.Translate(a.YValue) + Draw.Annotation(r, canvasBox, style, lx, ly, a.Label) + } + } +} + +// Validate validates the series. +func (as AnnotationSeries) Validate() error { + if len(as.Annotations) == 0 { + return fmt.Errorf("annotation series requires annotations to be set and not empty") + } + return nil +} diff --git a/annotation_series_test.go b/annotation_series_test.go new file mode 100644 index 0000000..1a33900 --- /dev/null +++ b/annotation_series_test.go @@ -0,0 +1,115 @@ +package chart + +import ( + "image/color" + "testing" + + "github.com/wcharczuk/go-chart/v2/drawing" + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestAnnotationSeriesMeasure(t *testing.T) { + // replaced new assertions helper + + as := AnnotationSeries{ + Annotations: []Value2{ + {XValue: 1.0, YValue: 1.0, Label: "1.0"}, + {XValue: 2.0, YValue: 2.0, Label: "2.0"}, + {XValue: 3.0, YValue: 3.0, Label: "3.0"}, + {XValue: 4.0, YValue: 4.0, Label: "4.0"}, + }, + } + + r, err := PNG(110, 110) + testutil.AssertNil(t, err) + + f, err := GetDefaultFont() + testutil.AssertNil(t, err) + + xrange := &ContinuousRange{ + Min: 1.0, + Max: 4.0, + Domain: 100, + } + yrange := &ContinuousRange{ + Min: 1.0, + Max: 4.0, + Domain: 100, + } + + cb := Box{ + Top: 5, + Left: 5, + Right: 105, + Bottom: 105, + } + sd := Style{ + FontSize: 10.0, + Font: f, + } + + box := as.Measure(r, cb, xrange, yrange, sd) + testutil.AssertFalse(t, box.IsZero()) + testutil.AssertEqual(t, -5.0, box.Top) + testutil.AssertEqual(t, 5.0, box.Left) + testutil.AssertEqual(t, 146.0, box.Right) //the top,left annotation sticks up 5px and out ~44px. + testutil.AssertEqual(t, 115.0, box.Bottom) +} + +func TestAnnotationSeriesRender(t *testing.T) { + // replaced new assertions helper + + as := AnnotationSeries{ + Style: Style{ + FillColor: drawing.ColorWhite, + StrokeColor: drawing.ColorBlack, + }, + Annotations: []Value2{ + {XValue: 1.0, YValue: 1.0, Label: "1.0"}, + {XValue: 2.0, YValue: 2.0, Label: "2.0"}, + {XValue: 3.0, YValue: 3.0, Label: "3.0"}, + {XValue: 4.0, YValue: 4.0, Label: "4.0"}, + }, + } + + r, err := PNG(110, 110) + testutil.AssertNil(t, err) + + f, err := GetDefaultFont() + testutil.AssertNil(t, err) + + xrange := &ContinuousRange{ + Min: 1.0, + Max: 4.0, + Domain: 100, + } + yrange := &ContinuousRange{ + Min: 1.0, + Max: 4.0, + Domain: 100, + } + + cb := Box{ + Top: 5, + Left: 5, + Right: 105, + Bottom: 105, + } + sd := Style{ + FontSize: 10.0, + Font: f, + } + + as.Render(r, cb, xrange, yrange, sd) + + rr, isRaster := r.(*rasterRenderer) + testutil.AssertTrue(t, isRaster) + testutil.AssertNotNil(t, rr) + + c := rr.i.At(38, 70) + converted, isRGBA := color.RGBAModel.Convert(c).(color.RGBA) + testutil.AssertTrue(t, isRGBA) + testutil.AssertEqual(t, 0, converted.R) + testutil.AssertEqual(t, 0, converted.G) + testutil.AssertEqual(t, 0, converted.B) +} diff --git a/array.go b/array.go new file mode 100644 index 0000000..71b3ee7 --- /dev/null +++ b/array.go @@ -0,0 +1,24 @@ +package chart + +var ( + _ Sequence = (*Array)(nil) +) + +// NewArray returns a new array from a given set of values. +// Array implements Sequence, which allows it to be used with the sequence helpers. +func NewArray(values ...float64) Array { + return Array(values) +} + +// Array is a wrapper for an array of floats that implements `ValuesProvider`. +type Array []float64 + +// Len returns the value provider length. +func (a Array) Len() int { + return len(a) +} + +// GetValue returns the value at a given index. +func (a Array) GetValue(index int) float64 { + return a[index] +} diff --git a/axis.go b/axis.go new file mode 100644 index 0000000..54e4d36 --- /dev/null +++ b/axis.go @@ -0,0 +1,45 @@ +package chart + +// TickPosition is an enumeration of possible tick drawing positions. +type TickPosition int + +const ( + // TickPositionUnset means to use the default tick position. + TickPositionUnset TickPosition = 0 + // TickPositionBetweenTicks draws the labels for a tick between the previous and current tick. + TickPositionBetweenTicks TickPosition = 1 + // TickPositionUnderTick draws the tick below the tick. + TickPositionUnderTick TickPosition = 2 +) + +// YAxisType is a type of y-axis; it can either be primary or secondary. +type YAxisType int + +const ( + // YAxisPrimary is the primary axis. + YAxisPrimary YAxisType = 0 + // YAxisSecondary is the secondary axis. + YAxisSecondary YAxisType = 1 +) + +// Axis is a chart feature detailing what values happen where. +type Axis interface { + GetName() string + SetName(name string) + + GetStyle() Style + SetStyle(style Style) + + GetTicks() []Tick + GenerateTicks(r Renderer, ra Range, vf ValueFormatter) []Tick + + // GenerateGridLines returns the gridlines for the axis. + GetGridLines(ticks []Tick) []GridLine + + // Measure should return an absolute box for the axis. + // This is used when auto-fitting the canvas to the background. + Measure(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick) Box + + // Render renders the axis. + Render(r Renderer, canvasBox Box, ra Range, style Style, ticks []Tick) +} diff --git a/bar_chart.go b/bar_chart.go new file mode 100644 index 0000000..ce22ba7 --- /dev/null +++ b/bar_chart.go @@ -0,0 +1,491 @@ +package chart + +import ( + "errors" + "fmt" + "io" + "math" + + "github.com/golang/freetype/truetype" +) + +// BarChart is a chart that draws bars on a range. +type BarChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + BarWidth int + + Background Style + Canvas Style + + XAxis Style + YAxis YAxis + + BarSpacing int + + UseBaseValue bool + BaseValue float64 + + Font *truetype.Font + defaultFont *truetype.Font + + Bars []Value + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (bc BarChart) GetDPI() float64 { + if bc.DPI == 0 { + return DefaultDPI + } + return bc.DPI +} + +// GetFont returns the text font. +func (bc BarChart) GetFont() *truetype.Font { + if bc.Font == nil { + return bc.defaultFont + } + return bc.Font +} + +// GetWidth returns the chart width or the default value. +func (bc BarChart) GetWidth() int { + if bc.Width == 0 { + return DefaultChartWidth + } + return bc.Width +} + +// GetHeight returns the chart height or the default value. +func (bc BarChart) GetHeight() int { + if bc.Height == 0 { + return DefaultChartHeight + } + return bc.Height +} + +// GetBarSpacing returns the spacing between bars. +func (bc BarChart) GetBarSpacing() int { + if bc.BarSpacing == 0 { + return DefaultBarSpacing + } + return bc.BarSpacing +} + +// GetBarWidth returns the default bar width. +func (bc BarChart) GetBarWidth() int { + if bc.BarWidth == 0 { + return DefaultBarWidth + } + return bc.BarWidth +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (bc BarChart) Render(rp RendererProvider, w io.Writer) error { + if len(bc.Bars) == 0 { + return errors.New("please provide at least one bar") + } + + r, err := rp(bc.GetWidth(), bc.GetHeight()) + if err != nil { + return err + } + + if bc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + bc.defaultFont = defaultFont + } + r.SetDPI(bc.GetDPI()) + + bc.drawBackground(r) + + var canvasBox Box + var yt []Tick + var yr Range + var yf ValueFormatter + + canvasBox = bc.getDefaultCanvasBox() + yr = bc.getRanges() + if yr.GetMax()-yr.GetMin() == 0 { + return fmt.Errorf("invalid data range; cannot be zero") + } + yr = bc.setRangeDomains(canvasBox, yr) + yf = bc.getValueFormatters() + + if bc.hasAxes() { + yt = bc.getAxesTicks(r, yr, yf) + canvasBox = bc.getAdjustedCanvasBox(r, canvasBox, yr, yt) + yr = bc.setRangeDomains(canvasBox, yr) + } + bc.drawCanvas(r, canvasBox) + bc.drawBars(r, canvasBox, yr) + bc.drawXAxis(r, canvasBox) + bc.drawYAxis(r, canvasBox, yr, yt) + + bc.drawTitle(r) + for _, a := range bc.Elements { + a(r, canvasBox, bc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (bc BarChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, bc.getCanvasStyle()) +} + +func (bc BarChart) getRanges() Range { + var yrange Range + if bc.YAxis.Range != nil && !bc.YAxis.Range.IsZero() { + yrange = bc.YAxis.Range + } else { + yrange = &ContinuousRange{} + } + + if !yrange.IsZero() { + return yrange + } + + if len(bc.YAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range bc.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrange.SetMin(tickMin) + yrange.SetMax(tickMax) + return yrange + } + + min, max := math.MaxFloat64, -math.MaxFloat64 + for _, b := range bc.Bars { + min = math.Min(b.Value, min) + max = math.Max(b.Value, max) + } + + yrange.SetMin(min) + yrange.SetMax(max) + + return yrange +} + +func (bc BarChart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: bc.GetWidth(), + Bottom: bc.GetHeight(), + }, bc.getBackgroundStyle()) +} + +func (bc BarChart) drawBars(r Renderer, canvasBox Box, yr Range) { + xoffset := canvasBox.Left + + width, spacing, _ := bc.calculateScaledTotalWidth(canvasBox) + bs2 := spacing >> 1 + + var barBox Box + var bxl, bxr, by int + for index, bar := range bc.Bars { + bxl = xoffset + bs2 + bxr = bxl + width + + 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{ + Top: by, + Left: bxl, + Right: bxr, + Bottom: canvasBox.Bottom, + } + } + + Draw.Box(r, barBox, bar.Style.InheritFrom(bc.styleDefaultsBar(index))) + + xoffset += width + spacing + } +} + +func (bc BarChart) drawXAxis(r Renderer, canvasBox Box) { + if !bc.XAxis.Hidden { + axisStyle := bc.XAxis.InheritFrom(bc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + width, spacing, _ := bc.calculateScaledTotalWidth(canvasBox) + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Right, canvasBox.Bottom) + r.Stroke() + + r.MoveTo(canvasBox.Left, canvasBox.Bottom) + r.LineTo(canvasBox.Left, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + + cursor := canvasBox.Left + for index, bar := range bc.Bars { + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + width + spacing, + Bottom: bc.GetHeight(), + } + + if len(bar.Label) > 0 { + Draw.TextWithin(r, bar.Label, barLabelBox, axisStyle) + } + + axisStyle.WriteToRenderer(r) + if index < len(bc.Bars)-1 { + r.MoveTo(barLabelBox.Right, canvasBox.Bottom) + r.LineTo(barLabelBox.Right, canvasBox.Bottom+DefaultVerticalTickHeight) + r.Stroke() + } + cursor += width + spacing + } + } +} + +func (bc BarChart) drawYAxis(r Renderer, canvasBox Box, yr Range, ticks []Tick) { + if !bc.YAxis.Style.Hidden { + bc.YAxis.Render(r, canvasBox, yr, bc.styleDefaultsAxes(), ticks) + } +} + +func (bc BarChart) drawTitle(r Renderer) { + if len(bc.Title) > 0 && !bc.TitleStyle.Hidden { + r.SetFont(bc.TitleStyle.GetFont(bc.GetFont())) + r.SetFontColor(bc.TitleStyle.GetFontColor(bc.GetColorPalette().TextColor())) + titleFontSize := bc.TitleStyle.GetFontSize(bc.getTitleFontSize()) + r.SetFontSize(titleFontSize) + + textBox := r.MeasureText(bc.Title) + + textWidth := textBox.Width() + textHeight := textBox.Height() + + titleX := (bc.GetWidth() >> 1) - (textWidth >> 1) + titleY := bc.TitleStyle.Padding.GetTop(DefaultTitleTop) + textHeight + + r.Text(bc.Title, titleX, titleY) + } +} + +func (bc BarChart) getCanvasStyle() Style { + return bc.Canvas.InheritFrom(bc.styleDefaultsCanvas()) +} + +func (bc BarChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: bc.GetColorPalette().CanvasColor(), + StrokeColor: bc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultCanvasStrokeWidth, + } +} + +func (bc BarChart) hasAxes() bool { + return !bc.YAxis.Style.Hidden +} + +func (bc BarChart) setRangeDomains(canvasBox Box, yr Range) Range { + yr.SetDomain(canvasBox.Height()) + return yr +} + +func (bc BarChart) getDefaultCanvasBox() Box { + return bc.box() +} + +func (bc BarChart) getValueFormatters() ValueFormatter { + if bc.YAxis.ValueFormatter != nil { + return bc.YAxis.ValueFormatter + } + return FloatValueFormatter +} + +func (bc BarChart) getAxesTicks(r Renderer, yr Range, yf ValueFormatter) (yticks []Tick) { + if !bc.YAxis.Style.Hidden { + yticks = bc.YAxis.GetTicks(r, yr, bc.styleDefaultsAxes(), yf) + } + return +} + +func (bc BarChart) calculateEffectiveBarSpacing(canvasBox Box) int { + totalWithBaseSpacing := bc.calculateTotalBarWidth(bc.GetBarWidth(), bc.GetBarSpacing()) + if totalWithBaseSpacing > canvasBox.Width() { + lessBarWidths := canvasBox.Width() - (len(bc.Bars) * bc.GetBarWidth()) + if lessBarWidths > 0 { + return int(math.Ceil(float64(lessBarWidths) / float64(len(bc.Bars)))) + } + return 0 + } + return bc.GetBarSpacing() +} + +func (bc BarChart) calculateEffectiveBarWidth(canvasBox Box, spacing int) int { + totalWithBaseWidth := bc.calculateTotalBarWidth(bc.GetBarWidth(), spacing) + if totalWithBaseWidth > canvasBox.Width() { + totalLessBarSpacings := canvasBox.Width() - (len(bc.Bars) * spacing) + if totalLessBarSpacings > 0 { + return int(math.Ceil(float64(totalLessBarSpacings) / float64(len(bc.Bars)))) + } + return 0 + } + return bc.GetBarWidth() +} + +func (bc BarChart) calculateTotalBarWidth(barWidth, spacing int) int { + return len(bc.Bars) * (barWidth + spacing) +} + +func (bc BarChart) calculateScaledTotalWidth(canvasBox Box) (width, spacing, total int) { + spacing = bc.calculateEffectiveBarSpacing(canvasBox) + width = bc.calculateEffectiveBarWidth(canvasBox, spacing) + total = bc.calculateTotalBarWidth(width, spacing) + return +} + +func (bc BarChart) getAdjustedCanvasBox(r Renderer, canvasBox Box, yrange Range, yticks []Tick) Box { + axesOuterBox := canvasBox.Clone() + + _, _, totalWidth := bc.calculateScaledTotalWidth(canvasBox) + + if !bc.XAxis.Hidden { + xaxisHeight := DefaultVerticalTickHeight + + axisStyle := bc.XAxis.InheritFrom(bc.styleDefaultsAxes()) + axisStyle.WriteToRenderer(r) + + cursor := canvasBox.Left + for _, bar := range bc.Bars { + if len(bar.Label) > 0 { + barLabelBox := Box{ + Top: canvasBox.Bottom + DefaultXAxisMargin, + Left: cursor, + Right: cursor + bc.GetBarWidth() + bc.GetBarSpacing(), + Bottom: bc.GetHeight(), + } + lines := Text.WrapFit(r, bar.Label, barLabelBox.Width(), axisStyle) + linesBox := Text.MeasureLines(r, lines, axisStyle) + + xaxisHeight = MinInt(linesBox.Height()+(2*DefaultXAxisMargin), xaxisHeight) + } + } + + xbox := Box{ + Top: canvasBox.Top, + Left: canvasBox.Left, + Right: canvasBox.Left + totalWidth, + Bottom: bc.GetHeight() - xaxisHeight, + } + + axesOuterBox = axesOuterBox.Grow(xbox) + } + + if !bc.YAxis.Style.Hidden { + axesBounds := bc.YAxis.Measure(r, canvasBox, yrange, bc.styleDefaultsAxes(), yticks) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + + return canvasBox.OuterConstrain(bc.box(), axesOuterBox) +} + +// box returns the chart bounds as a box. +func (bc BarChart) box() Box { + dpr := bc.Background.Padding.GetRight(10) + dpb := bc.Background.Padding.GetBottom(50) + + return Box{ + Top: bc.Background.Padding.GetTop(20), + Left: bc.Background.Padding.GetLeft(20), + Right: bc.GetWidth() - dpr, + Bottom: bc.GetHeight() - dpb, + } +} + +func (bc BarChart) getBackgroundStyle() Style { + return bc.Background.InheritFrom(bc.styleDefaultsBackground()) +} + +func (bc BarChart) styleDefaultsBackground() Style { + return Style{ + FillColor: bc.GetColorPalette().BackgroundColor(), + StrokeColor: bc.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (bc BarChart) styleDefaultsBar(index int) Style { + return Style{ + StrokeColor: bc.GetColorPalette().GetSeriesColor(index), + StrokeWidth: 3.0, + FillColor: bc.GetColorPalette().GetSeriesColor(index), + } +} + +func (bc BarChart) styleDefaultsTitle() Style { + return bc.TitleStyle.InheritFrom(Style{ + FontColor: bc.GetColorPalette().TextColor(), + Font: bc.GetFont(), + FontSize: bc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (bc BarChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(bc.GetWidth(), bc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +func (bc BarChart) styleDefaultsAxes() Style { + return Style{ + StrokeColor: bc.GetColorPalette().AxisStrokeColor(), + Font: bc.GetFont(), + FontSize: DefaultAxisFontSize, + FontColor: bc.GetColorPalette().TextColor(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + } +} + +func (bc BarChart) styleDefaultsElements() Style { + return Style{ + Font: bc.GetFont(), + } +} + +// GetColorPalette returns the color palette for the chart. +func (bc BarChart) GetColorPalette() ColorPalette { + if bc.ColorPalette != nil { + return bc.ColorPalette + } + return AlternateColorPalette +} diff --git a/bar_chart_test.go b/bar_chart_test.go new file mode 100644 index 0000000..e62ef83 --- /dev/null +++ b/bar_chart_test.go @@ -0,0 +1,310 @@ +package chart + +import ( + "bytes" + "math" + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestBarChartRender(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Width: 1024, + Title: "Test Title", + Bars: []Value{ + {Value: 1.0, Label: "One"}, + {Value: 2.0, Label: "Two"}, + {Value: 3.0, Label: "Three"}, + {Value: 4.0, Label: "Four"}, + {Value: 5.0, Label: "Five"}, + }, + } + + buf := bytes.NewBuffer([]byte{}) + err := bc.Render(PNG, buf) + testutil.AssertNil(t, err) + testutil.AssertNotZero(t, buf.Len()) +} + +func TestBarChartRenderZero(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Width: 1024, + Title: "Test Title", + Bars: []Value{ + {Value: 0.0, Label: "One"}, + {Value: 0.0, Label: "Two"}, + }, + } + + buf := bytes.NewBuffer([]byte{}) + err := bc.Render(PNG, buf) + testutil.AssertNotNil(t, err) +} + +func TestBarChartProps(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + + testutil.AssertEqual(t, DefaultDPI, bc.GetDPI()) + bc.DPI = 100 + testutil.AssertEqual(t, 100, bc.GetDPI()) + + testutil.AssertNil(t, bc.GetFont()) + f, err := GetDefaultFont() + testutil.AssertNil(t, err) + bc.Font = f + testutil.AssertNotNil(t, bc.GetFont()) + + testutil.AssertEqual(t, DefaultChartWidth, bc.GetWidth()) + bc.Width = DefaultChartWidth - 1 + testutil.AssertEqual(t, DefaultChartWidth-1, bc.GetWidth()) + + testutil.AssertEqual(t, DefaultChartHeight, bc.GetHeight()) + bc.Height = DefaultChartHeight - 1 + testutil.AssertEqual(t, DefaultChartHeight-1, bc.GetHeight()) + + testutil.AssertEqual(t, DefaultBarSpacing, bc.GetBarSpacing()) + bc.BarSpacing = 150 + testutil.AssertEqual(t, 150, bc.GetBarSpacing()) + + testutil.AssertEqual(t, DefaultBarWidth, bc.GetBarWidth()) + bc.BarWidth = 75 + testutil.AssertEqual(t, 75, bc.GetBarWidth()) +} + +func TestBarChartRenderNoBars(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + err := bc.Render(PNG, bytes.NewBuffer([]byte{})) + testutil.AssertNotNil(t, err) +} + +func TestBarChartGetRanges(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + + yr := bc.getRanges() + testutil.AssertNotNil(t, yr) + testutil.AssertFalse(t, yr.IsZero()) + + testutil.AssertEqual(t, -math.MaxFloat64, yr.GetMax()) + testutil.AssertEqual(t, math.MaxFloat64, yr.GetMin()) +} + +func TestBarChartGetRangesBarsMinMax(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Bars: []Value{ + {Value: 1.0}, + {Value: 10.0}, + }, + } + + yr := bc.getRanges() + testutil.AssertNotNil(t, yr) + testutil.AssertFalse(t, yr.IsZero()) + + testutil.AssertEqual(t, 10, yr.GetMax()) + testutil.AssertEqual(t, 1, yr.GetMin()) +} + +func TestBarChartGetRangesMinMax(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + YAxis: YAxis{ + Range: &ContinuousRange{ + Min: 5.0, + Max: 15.0, + }, + Ticks: []Tick{ + {Value: 7.0, Label: "Foo"}, + {Value: 11.0, Label: "Foo2"}, + }, + }, + Bars: []Value{ + {Value: 1.0}, + {Value: 10.0}, + }, + } + + yr := bc.getRanges() + testutil.AssertNotNil(t, yr) + testutil.AssertFalse(t, yr.IsZero()) + + testutil.AssertEqual(t, 15, yr.GetMax()) + testutil.AssertEqual(t, 5, yr.GetMin()) +} + +func TestBarChartGetRangesTicksMinMax(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + YAxis: YAxis{ + Ticks: []Tick{ + {Value: 7.0, Label: "Foo"}, + {Value: 11.0, Label: "Foo2"}, + }, + }, + Bars: []Value{ + {Value: 1.0}, + {Value: 10.0}, + }, + } + + yr := bc.getRanges() + testutil.AssertNotNil(t, yr) + testutil.AssertFalse(t, yr.IsZero()) + + testutil.AssertEqual(t, 11, yr.GetMax()) + testutil.AssertEqual(t, 7, yr.GetMin()) +} + +func TestBarChartHasAxes(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + testutil.AssertTrue(t, bc.hasAxes()) + bc.YAxis = YAxis{ + Style: Hidden(), + } + testutil.AssertFalse(t, bc.hasAxes()) +} + +func TestBarChartGetDefaultCanvasBox(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + b := bc.getDefaultCanvasBox() + testutil.AssertFalse(t, b.IsZero()) +} + +func TestBarChartSetRangeDomains(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + cb := bc.box() + yr := bc.getRanges() + yr2 := bc.setRangeDomains(cb, yr) + testutil.AssertNotZero(t, yr2.GetDomain()) +} + +func TestBarChartGetValueFormatters(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{} + vf := bc.getValueFormatters() + testutil.AssertNotNil(t, vf) + testutil.AssertEqual(t, "1234.00", vf(1234.0)) + + bc.YAxis.ValueFormatter = func(_ interface{}) string { return "test" } + testutil.AssertEqual(t, "test", bc.getValueFormatters()(1234)) +} + +func TestBarChartGetAxesTicks(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Bars: []Value{ + {Value: 1.0}, + {Value: 2.0}, + {Value: 3.0}, + }, + } + + r, err := PNG(128, 128) + testutil.AssertNil(t, err) + yr := bc.getRanges() + yf := bc.getValueFormatters() + + bc.YAxis.Style.Hidden = true + ticks := bc.getAxesTicks(r, yr, yf) + testutil.AssertEmpty(t, ticks) + + bc.YAxis.Style.Hidden = false + ticks = bc.getAxesTicks(r, yr, yf) + testutil.AssertLen(t, ticks, 2) +} + +func TestBarChartCalculateEffectiveBarSpacing(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Width: 1024, + BarWidth: 10, + Bars: []Value{ + {Value: 1.0, Label: "One"}, + {Value: 2.0, Label: "Two"}, + {Value: 3.0, Label: "Three"}, + {Value: 4.0, Label: "Four"}, + {Value: 5.0, Label: "Five"}, + }, + } + + spacing := bc.calculateEffectiveBarSpacing(bc.box()) + testutil.AssertNotZero(t, spacing) + + bc.BarWidth = 250 + spacing = bc.calculateEffectiveBarSpacing(bc.box()) + testutil.AssertZero(t, spacing) +} + +func TestBarChartCalculateEffectiveBarWidth(t *testing.T) { + // replaced new assertions helper + + bc := BarChart{ + Width: 1024, + BarWidth: 10, + Bars: []Value{ + {Value: 1.0, Label: "One"}, + {Value: 2.0, Label: "Two"}, + {Value: 3.0, Label: "Three"}, + {Value: 4.0, Label: "Four"}, + {Value: 5.0, Label: "Five"}, + }, + } + + cb := bc.box() + + spacing := bc.calculateEffectiveBarSpacing(bc.box()) + testutil.AssertNotZero(t, spacing) + + barWidth := bc.calculateEffectiveBarWidth(bc.box(), spacing) + testutil.AssertEqual(t, 10, barWidth) + + bc.BarWidth = 250 + spacing = bc.calculateEffectiveBarSpacing(bc.box()) + testutil.AssertZero(t, spacing) + barWidth = bc.calculateEffectiveBarWidth(bc.box(), spacing) + testutil.AssertEqual(t, 199, barWidth) + + testutil.AssertEqual(t, cb.Width()+1, bc.calculateTotalBarWidth(barWidth, spacing)) + + bw, bs, total := bc.calculateScaledTotalWidth(cb) + testutil.AssertEqual(t, spacing, bs) + testutil.AssertEqual(t, barWidth, bw) + testutil.AssertEqual(t, cb.Width()+1, total) +} + +func TestBarChatGetTitleFontSize(t *testing.T) { + // replaced new assertions helper + size := BarChart{Width: 2049, Height: 2049}.getTitleFontSize() + testutil.AssertEqual(t, 48, size) + size = BarChart{Width: 1025, Height: 1025}.getTitleFontSize() + testutil.AssertEqual(t, 24, size) + size = BarChart{Width: 513, Height: 513}.getTitleFontSize() + testutil.AssertEqual(t, 18, size) + size = BarChart{Width: 257, Height: 257}.getTitleFontSize() + testutil.AssertEqual(t, 12, size) + size = BarChart{Width: 128, Height: 128}.getTitleFontSize() + testutil.AssertEqual(t, 10, size) +} diff --git a/bollinger_band_series.go b/bollinger_band_series.go new file mode 100644 index 0000000..728b232 --- /dev/null +++ b/bollinger_band_series.go @@ -0,0 +1,135 @@ +package chart + +import ( + "fmt" +) + +// Interface Assertions. +var ( + _ Series = (*BollingerBandsSeries)(nil) +) + +// BollingerBandsSeries draws bollinger bands for an inner series. +// Bollinger bands are defined by two lines, one at SMA+k*stddev, one at SMA-k*stdev. +type BollingerBandsSeries struct { + Name string + Style Style + YAxis YAxisType + + Period int + K float64 + InnerSeries ValuesProvider + + valueBuffer *ValueBuffer +} + +// GetName returns the name of the time series. +func (bbs BollingerBandsSeries) GetName() string { + return bbs.Name +} + +// GetStyle returns the line style. +func (bbs BollingerBandsSeries) GetStyle() Style { + return bbs.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (bbs BollingerBandsSeries) GetYAxis() YAxisType { + return bbs.YAxis +} + +// GetPeriod returns the window size. +func (bbs BollingerBandsSeries) GetPeriod() int { + if bbs.Period == 0 { + return DefaultSimpleMovingAveragePeriod + } + return bbs.Period +} + +// GetK returns the K value, or the number of standard deviations above and below +// to band the simple moving average with. +// Typical K value is 2.0. +func (bbs BollingerBandsSeries) GetK(defaults ...float64) float64 { + if bbs.K == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 2.0 + } + return bbs.K +} + +// Len returns the number of elements in the series. +func (bbs BollingerBandsSeries) Len() int { + return bbs.InnerSeries.Len() +} + +// GetBoundedValues gets the bounded value for the series. +func (bbs *BollingerBandsSeries) GetBoundedValues(index int) (x, y1, y2 float64) { + if bbs.InnerSeries == nil { + return + } + if bbs.valueBuffer == nil || index == 0 { + bbs.valueBuffer = NewValueBufferWithCapacity(bbs.GetPeriod()) + } + if bbs.valueBuffer.Len() >= bbs.GetPeriod() { + bbs.valueBuffer.Dequeue() + } + px, py := bbs.InnerSeries.GetValues(index) + bbs.valueBuffer.Enqueue(py) + x = px + + ay := Seq{bbs.valueBuffer}.Average() + std := Seq{bbs.valueBuffer}.StdDev() + + y1 = ay + (bbs.GetK() * std) + y2 = ay - (bbs.GetK() * std) + return +} + +// GetBoundedLastValues returns the last bounded value for the series. +func (bbs *BollingerBandsSeries) GetBoundedLastValues() (x, y1, y2 float64) { + if bbs.InnerSeries == nil { + return + } + period := bbs.GetPeriod() + seriesLength := bbs.InnerSeries.Len() + startAt := seriesLength - period + if startAt < 0 { + startAt = 0 + } + + vb := NewValueBufferWithCapacity(period) + for index := startAt; index < seriesLength; index++ { + xn, yn := bbs.InnerSeries.GetValues(index) + vb.Enqueue(yn) + x = xn + } + + ay := Seq{vb}.Average() + std := Seq{vb}.StdDev() + + y1 = ay + (bbs.GetK() * std) + y2 = ay - (bbs.GetK() * std) + + return +} + +// Render renders the series. +func (bbs *BollingerBandsSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + s := bbs.Style.InheritFrom(defaults.InheritFrom(Style{ + StrokeWidth: 1.0, + StrokeColor: DefaultAxisColor.WithAlpha(64), + FillColor: DefaultAxisColor.WithAlpha(32), + })) + + Draw.BoundedSeries(r, canvasBox, xrange, yrange, s, bbs, bbs.GetPeriod()) +} + +// Validate validates the series. +func (bbs BollingerBandsSeries) Validate() error { + if bbs.InnerSeries == nil { + return fmt.Errorf("bollinger bands series requires InnerSeries to be set") + } + return nil +} diff --git a/bollinger_band_series_test.go b/bollinger_band_series_test.go new file mode 100644 index 0000000..b33b0ec --- /dev/null +++ b/bollinger_band_series_test.go @@ -0,0 +1,52 @@ +package chart + +import ( + "fmt" + "math" + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestBollingerBandSeries(t *testing.T) { + // replaced new assertions helper + + s1 := mockValuesProvider{ + X: LinearRange(1.0, 100.0), + Y: RandomValuesWithMax(100, 1024), + } + + bbs := &BollingerBandsSeries{ + InnerSeries: s1, + } + + xvalues := make([]float64, 100) + y1values := make([]float64, 100) + y2values := make([]float64, 100) + + for x := 0; x < 100; x++ { + xvalues[x], y1values[x], y2values[x] = bbs.GetBoundedValues(x) + } + + for x := bbs.GetPeriod(); x < 100; x++ { + testutil.AssertTrue(t, y1values[x] > y2values[x], fmt.Sprintf("%v vs. %v", y1values[x], y2values[x])) + } +} + +func TestBollingerBandLastValue(t *testing.T) { + // replaced new assertions helper + + s1 := mockValuesProvider{ + X: LinearRange(1.0, 100.0), + Y: LinearRange(1.0, 100.0), + } + + bbs := &BollingerBandsSeries{ + InnerSeries: s1, + } + + x, y1, y2 := bbs.GetBoundedLastValues() + testutil.AssertEqual(t, 100.0, x) + testutil.AssertEqual(t, 101, math.Floor(y1)) + testutil.AssertEqual(t, 83, math.Floor(y2)) +} diff --git a/bounded_last_values_annotation_series.go b/bounded_last_values_annotation_series.go new file mode 100644 index 0000000..670ddf7 --- /dev/null +++ b/bounded_last_values_annotation_series.go @@ -0,0 +1,36 @@ +package chart + +import "fmt" + +// BoundedLastValuesAnnotationSeries returns a last value annotation series for a bounded values provider. +func BoundedLastValuesAnnotationSeries(innerSeries FullBoundedValuesProvider, vfs ...ValueFormatter) AnnotationSeries { + lvx, lvy1, lvy2 := innerSeries.GetBoundedLastValues() + + var vf ValueFormatter + if len(vfs) > 0 { + vf = vfs[0] + } else if typed, isTyped := innerSeries.(ValueFormatterProvider); isTyped { + _, vf = typed.GetValueFormatters() + } else { + vf = FloatValueFormatter + } + + label1 := vf(lvy1) + label2 := vf(lvy2) + + var seriesName string + var seriesStyle Style + if typed, isTyped := innerSeries.(Series); isTyped { + seriesName = fmt.Sprintf("%s - Last Values", typed.GetName()) + seriesStyle = typed.GetStyle() + } + + return AnnotationSeries{ + Name: seriesName, + Style: seriesStyle, + Annotations: []Value2{ + {XValue: lvx, YValue: lvy1, Label: label1}, + {XValue: lvx, YValue: lvy2, Label: label2}, + }, + } +} diff --git a/box.go b/box.go new file mode 100644 index 0000000..2641bd4 --- /dev/null +++ b/box.go @@ -0,0 +1,367 @@ +package chart + +import ( + "fmt" + "math" +) + +var ( + // BoxZero is a preset box that represents an intentional zero value. + BoxZero = Box{IsSet: true} +) + +// NewBox returns a new (set) box. +func NewBox(top, left, right, bottom int) Box { + return Box{ + IsSet: true, + Top: top, + Left: left, + Right: right, + Bottom: bottom, + } +} + +// Box represents the main 4 dimensions of a box. +type Box struct { + Top int + Left int + Right int + Bottom int + IsSet bool +} + +// IsZero returns if the box is set or not. +func (b Box) IsZero() bool { + if b.IsSet { + return false + } + return b.Top == 0 && b.Left == 0 && b.Right == 0 && b.Bottom == 0 +} + +// String returns a string representation of the box. +func (b Box) String() string { + return fmt.Sprintf("box(%d,%d,%d,%d)", b.Top, b.Left, b.Right, b.Bottom) +} + +// GetTop returns a coalesced value with a default. +func (b Box) GetTop(defaults ...int) int { + if !b.IsSet && b.Top == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Top +} + +// GetLeft returns a coalesced value with a default. +func (b Box) GetLeft(defaults ...int) int { + if !b.IsSet && b.Left == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Left +} + +// GetRight returns a coalesced value with a default. +func (b Box) GetRight(defaults ...int) int { + if !b.IsSet && b.Right == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Right +} + +// GetBottom returns a coalesced value with a default. +func (b Box) GetBottom(defaults ...int) int { + if !b.IsSet && b.Bottom == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return 0 + } + return b.Bottom +} + +// Width returns the width +func (b Box) Width() int { + return AbsInt(b.Right - b.Left) +} + +// Height returns the height +func (b Box) Height() int { + return AbsInt(b.Bottom - b.Top) +} + +// Center returns the center of the box +func (b Box) Center() (x, y int) { + w2, h2 := b.Width()>>1, b.Height()>>1 + return b.Left + w2, b.Top + h2 +} + +// Aspect returns the aspect ratio of the box. +func (b Box) Aspect() float64 { + return float64(b.Width()) / float64(b.Height()) +} + +// Clone returns a new copy of the box. +func (b Box) Clone() Box { + return Box{ + IsSet: b.IsSet, + Top: b.Top, + Left: b.Left, + Right: b.Right, + Bottom: b.Bottom, + } +} + +// IsBiggerThan returns if a box is bigger than another box. +func (b Box) IsBiggerThan(other Box) bool { + return b.Top < other.Top || + b.Bottom > other.Bottom || + b.Left < other.Left || + b.Right > other.Right +} + +// IsSmallerThan returns if a box is smaller than another box. +func (b Box) IsSmallerThan(other Box) bool { + return b.Top > other.Top && + b.Bottom < other.Bottom && + b.Left > other.Left && + b.Right < other.Right +} + +// Equals returns if the box equals another box. +func (b Box) Equals(other Box) bool { + return b.Top == other.Top && + b.Left == other.Left && + b.Right == other.Right && + b.Bottom == other.Bottom +} + +// Grow grows a box based on another box. +func (b Box) Grow(other Box) Box { + return Box{ + Top: MinInt(b.Top, other.Top), + Left: MinInt(b.Left, other.Left), + Right: MaxInt(b.Right, other.Right), + Bottom: MaxInt(b.Bottom, other.Bottom), + } +} + +// Shift pushes a box by x,y. +func (b Box) Shift(x, y int) Box { + return Box{ + Top: b.Top + y, + Left: b.Left + x, + Right: b.Right + x, + Bottom: b.Bottom + y, + } +} + +// Corners returns the box as a set of corners. +func (b Box) Corners() BoxCorners { + return BoxCorners{ + TopLeft: Point{b.Left, b.Top}, + TopRight: Point{b.Right, b.Top}, + BottomRight: Point{b.Right, b.Bottom}, + BottomLeft: Point{b.Left, b.Bottom}, + } +} + +// Fit is functionally the inverse of grow. +// Fit maintains the original aspect ratio of the `other` box, +// but constrains it to the bounds of the target box. +func (b Box) Fit(other Box) Box { + ba := b.Aspect() + oa := other.Aspect() + + if oa == ba { + return b.Clone() + } + + bw, bh := float64(b.Width()), float64(b.Height()) + bw2 := int(bw) >> 1 + bh2 := int(bh) >> 1 + if oa > ba { // ex. 16:9 vs. 4:3 + var noh2 int + if oa > 1.0 { + noh2 = int(bw/oa) >> 1 + } else { + noh2 = int(bh*oa) >> 1 + } + return Box{ + Top: (b.Top + bh2) - noh2, + Left: b.Left, + Right: b.Right, + Bottom: (b.Top + bh2) + noh2, + } + } + var now2 int + if oa > 1.0 { + now2 = int(bh/oa) >> 1 + } else { + now2 = int(bw*oa) >> 1 + } + return Box{ + Top: b.Top, + Left: (b.Left + bw2) - now2, + Right: (b.Left + bw2) + now2, + Bottom: b.Bottom, + } +} + +// Constrain is similar to `Fit` except that it will work +// more literally like the opposite of grow. +func (b Box) Constrain(other Box) Box { + newBox := b.Clone() + + newBox.Top = MaxInt(newBox.Top, other.Top) + newBox.Left = MaxInt(newBox.Left, other.Left) + newBox.Right = MinInt(newBox.Right, other.Right) + newBox.Bottom = MinInt(newBox.Bottom, other.Bottom) + + return newBox +} + +// OuterConstrain is similar to `Constraint` with the difference +// that it applies corrections +func (b Box) OuterConstrain(bounds, other Box) Box { + newBox := b.Clone() + if other.Top < bounds.Top { + delta := bounds.Top - other.Top + newBox.Top = b.Top + delta + } + + if other.Left < bounds.Left { + delta := bounds.Left - other.Left + newBox.Left = b.Left + delta + } + + if other.Right > bounds.Right { + delta := other.Right - bounds.Right + newBox.Right = b.Right - delta + } + + if other.Bottom > bounds.Bottom { + delta := other.Bottom - bounds.Bottom + newBox.Bottom = b.Bottom - delta + } + return newBox +} + +func (b Box) Validate() error { + if b.Left < 0 { + return fmt.Errorf("invalid left; must be >= 0") + } + if b.Right < 0 { + return fmt.Errorf("invalid right; must be > 0") + } + if b.Top < 0 { + return fmt.Errorf("invalid top; must be > 0") + } + if b.Bottom < 0 { + return fmt.Errorf("invalid bottom; must be > 0") + } + return nil +} + +// BoxCorners is a box with independent corners. +type BoxCorners struct { + TopLeft, TopRight, BottomRight, BottomLeft Point +} + +// Box return the BoxCorners as a regular box. +func (bc BoxCorners) Box() Box { + return Box{ + Top: MinInt(bc.TopLeft.Y, bc.TopRight.Y), + Left: MinInt(bc.TopLeft.X, bc.BottomLeft.X), + Right: MaxInt(bc.TopRight.X, bc.BottomRight.X), + Bottom: MaxInt(bc.BottomLeft.Y, bc.BottomRight.Y), + } +} + +// Width returns the width +func (bc BoxCorners) Width() int { + minLeft := MinInt(bc.TopLeft.X, bc.BottomLeft.X) + maxRight := MaxInt(bc.TopRight.X, bc.BottomRight.X) + return maxRight - minLeft +} + +// Height returns the height +func (bc BoxCorners) Height() int { + minTop := MinInt(bc.TopLeft.Y, bc.TopRight.Y) + maxBottom := MaxInt(bc.BottomLeft.Y, bc.BottomRight.Y) + return maxBottom - minTop +} + +// Center returns the center of the box +func (bc BoxCorners) Center() (x, y int) { + + left := MeanInt(bc.TopLeft.X, bc.BottomLeft.X) + right := MeanInt(bc.TopRight.X, bc.BottomRight.X) + x = ((right - left) >> 1) + left + + top := MeanInt(bc.TopLeft.Y, bc.TopRight.Y) + bottom := MeanInt(bc.BottomLeft.Y, bc.BottomRight.Y) + y = ((bottom - top) >> 1) + top + + return +} + +// Rotate rotates the box. +func (bc BoxCorners) Rotate(thetaDegrees float64) BoxCorners { + cx, cy := bc.Center() + + thetaRadians := DegreesToRadians(thetaDegrees) + + tlx, tly := RotateCoordinate(cx, cy, bc.TopLeft.X, bc.TopLeft.Y, thetaRadians) + trx, try := RotateCoordinate(cx, cy, bc.TopRight.X, bc.TopRight.Y, thetaRadians) + brx, bry := RotateCoordinate(cx, cy, bc.BottomRight.X, bc.BottomRight.Y, thetaRadians) + blx, bly := RotateCoordinate(cx, cy, bc.BottomLeft.X, bc.BottomLeft.Y, thetaRadians) + + return BoxCorners{ + TopLeft: Point{tlx, tly}, + TopRight: Point{trx, try}, + BottomRight: Point{brx, bry}, + BottomLeft: Point{blx, bly}, + } +} + +// Equals returns if the box equals another box. +func (bc BoxCorners) Equals(other BoxCorners) bool { + return bc.TopLeft.Equals(other.TopLeft) && + bc.TopRight.Equals(other.TopRight) && + bc.BottomRight.Equals(other.BottomRight) && + bc.BottomLeft.Equals(other.BottomLeft) +} + +func (bc BoxCorners) String() string { + return fmt.Sprintf("BoxC{%s,%s,%s,%s}", bc.TopLeft.String(), bc.TopRight.String(), bc.BottomRight.String(), bc.BottomLeft.String()) +} + +// Point is an X,Y pair +type Point struct { + X, Y int +} + +// DistanceTo calculates the distance to another point. +func (p Point) DistanceTo(other Point) float64 { + dx := math.Pow(float64(p.X-other.X), 2) + dy := math.Pow(float64(p.Y-other.Y), 2) + return math.Pow(dx+dy, 0.5) +} + +// Equals returns if a point equals another point. +func (p Point) Equals(other Point) bool { + return p.X == other.X && p.Y == other.Y +} + +// String returns a string representation of the point. +func (p Point) String() string { + return fmt.Sprintf("P{%d,%d}", p.X, p.Y) +} diff --git a/box_test.go b/box_test.go new file mode 100644 index 0000000..e62d5b7 --- /dev/null +++ b/box_test.go @@ -0,0 +1,188 @@ +package chart + +import ( + "math" + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestBoxClone(t *testing.T) { + // replaced new assertions helper + a := Box{Top: 5, Left: 5, Right: 15, Bottom: 15} + b := a.Clone() + testutil.AssertTrue(t, a.Equals(b)) + testutil.AssertTrue(t, b.Equals(a)) +} + +func TestBoxEquals(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 5, Left: 5, Right: 15, Bottom: 15} + b := Box{Top: 10, Left: 10, Right: 30, Bottom: 30} + c := Box{Top: 5, Left: 5, Right: 15, Bottom: 15} + testutil.AssertTrue(t, a.Equals(a)) + testutil.AssertTrue(t, a.Equals(c)) + testutil.AssertTrue(t, c.Equals(a)) + testutil.AssertFalse(t, a.Equals(b)) + testutil.AssertFalse(t, c.Equals(b)) + testutil.AssertFalse(t, b.Equals(a)) + testutil.AssertFalse(t, b.Equals(c)) +} + +func TestBoxIsBiggerThan(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 5, Left: 5, Right: 25, Bottom: 25} + b := Box{Top: 10, Left: 10, Right: 20, Bottom: 20} // only half bigger + c := Box{Top: 1, Left: 1, Right: 30, Bottom: 30} //bigger + testutil.AssertTrue(t, a.IsBiggerThan(b)) + testutil.AssertFalse(t, a.IsBiggerThan(c)) + testutil.AssertTrue(t, c.IsBiggerThan(a)) +} + +func TestBoxIsSmallerThan(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 5, Left: 5, Right: 25, Bottom: 25} + b := Box{Top: 10, Left: 10, Right: 20, Bottom: 20} // only half bigger + c := Box{Top: 1, Left: 1, Right: 30, Bottom: 30} //bigger + testutil.AssertFalse(t, a.IsSmallerThan(b)) + testutil.AssertTrue(t, a.IsSmallerThan(c)) + testutil.AssertFalse(t, c.IsSmallerThan(a)) +} + +func TestBoxGrow(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 1, Left: 2, Right: 15, Bottom: 15} + b := Box{Top: 4, Left: 5, Right: 30, Bottom: 35} + c := a.Grow(b) + testutil.AssertFalse(t, c.Equals(b)) + testutil.AssertFalse(t, c.Equals(a)) + testutil.AssertEqual(t, 1, c.Top) + testutil.AssertEqual(t, 2, c.Left) + testutil.AssertEqual(t, 30, c.Right) + testutil.AssertEqual(t, 35, c.Bottom) +} + +func TestBoxFit(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 64, Left: 64, Right: 192, Bottom: 192} + b := Box{Top: 16, Left: 16, Right: 256, Bottom: 170} + c := Box{Top: 16, Left: 16, Right: 170, Bottom: 256} + + fab := a.Fit(b) + testutil.AssertEqual(t, a.Left, fab.Left) + testutil.AssertEqual(t, a.Right, fab.Right) + testutil.AssertTrue(t, fab.Top < fab.Bottom) + testutil.AssertTrue(t, fab.Left < fab.Right) + testutil.AssertTrue(t, math.Abs(b.Aspect()-fab.Aspect()) < 0.02) + + fac := a.Fit(c) + testutil.AssertEqual(t, a.Top, fac.Top) + testutil.AssertEqual(t, a.Bottom, fac.Bottom) + testutil.AssertTrue(t, math.Abs(c.Aspect()-fac.Aspect()) < 0.02) +} + +func TestBoxConstrain(t *testing.T) { + // replaced new assertions helper + + a := Box{Top: 64, Left: 64, Right: 192, Bottom: 192} + b := Box{Top: 16, Left: 16, Right: 256, Bottom: 170} + c := Box{Top: 16, Left: 16, Right: 170, Bottom: 256} + + cab := a.Constrain(b) + testutil.AssertEqual(t, 64, cab.Top) + testutil.AssertEqual(t, 64, cab.Left) + testutil.AssertEqual(t, 192, cab.Right) + testutil.AssertEqual(t, 170, cab.Bottom) + + cac := a.Constrain(c) + testutil.AssertEqual(t, 64, cac.Top) + testutil.AssertEqual(t, 64, cac.Left) + testutil.AssertEqual(t, 170, cac.Right) + testutil.AssertEqual(t, 192, cac.Bottom) +} + +func TestBoxOuterConstrain(t *testing.T) { + // replaced new assertions helper + + box := NewBox(0, 0, 100, 100) + canvas := NewBox(5, 5, 95, 95) + taller := NewBox(-10, 5, 50, 50) + + c := canvas.OuterConstrain(box, taller) + testutil.AssertEqual(t, 15, c.Top, c.String()) + testutil.AssertEqual(t, 5, c.Left, c.String()) + testutil.AssertEqual(t, 95, c.Right, c.String()) + testutil.AssertEqual(t, 95, c.Bottom, c.String()) + + wider := NewBox(5, 5, 110, 50) + d := canvas.OuterConstrain(box, wider) + testutil.AssertEqual(t, 5, d.Top, d.String()) + testutil.AssertEqual(t, 5, d.Left, d.String()) + testutil.AssertEqual(t, 85, d.Right, d.String()) + testutil.AssertEqual(t, 95, d.Bottom, d.String()) +} + +func TestBoxShift(t *testing.T) { + // replaced new assertions helper + + b := Box{ + Top: 5, + Left: 5, + Right: 10, + Bottom: 10, + } + + shifted := b.Shift(1, 2) + testutil.AssertEqual(t, 7, shifted.Top) + testutil.AssertEqual(t, 6, shifted.Left) + testutil.AssertEqual(t, 11, shifted.Right) + testutil.AssertEqual(t, 12, shifted.Bottom) +} + +func TestBoxCenter(t *testing.T) { + // replaced new assertions helper + + b := Box{ + Top: 10, + Left: 10, + Right: 20, + Bottom: 30, + } + cx, cy := b.Center() + testutil.AssertEqual(t, 15, cx) + testutil.AssertEqual(t, 20, cy) +} + +func TestBoxCornersCenter(t *testing.T) { + // replaced new assertions helper + + bc := BoxCorners{ + TopLeft: Point{5, 5}, + TopRight: Point{15, 5}, + BottomRight: Point{15, 15}, + BottomLeft: Point{5, 15}, + } + + cx, cy := bc.Center() + testutil.AssertEqual(t, 10, cx) + testutil.AssertEqual(t, 10, cy) +} + +func TestBoxCornersRotate(t *testing.T) { + // replaced new assertions helper + + bc := BoxCorners{ + TopLeft: Point{5, 5}, + TopRight: Point{15, 5}, + BottomRight: Point{15, 15}, + BottomLeft: Point{5, 15}, + } + + rotated := bc.Rotate(45) + testutil.AssertTrue(t, rotated.TopLeft.Equals(Point{10, 3}), rotated.String()) +} diff --git a/chart.go b/chart.go new file mode 100644 index 0000000..5212a43 --- /dev/null +++ b/chart.go @@ -0,0 +1,577 @@ +package chart + +import ( + "errors" + "fmt" + "io" + "math" + + "github.com/golang/freetype/truetype" +) + +// Chart is what we're drawing. +type Chart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + + XAxis XAxis + YAxis YAxis + YAxisSecondary YAxis + + Font *truetype.Font + defaultFont *truetype.Font + + Series []Series + Elements []Renderable + + Log Logger +} + +// GetDPI returns the dpi for the chart. +func (c Chart) GetDPI(defaults ...float64) float64 { + if c.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return c.DPI +} + +// GetFont returns the text font. +func (c Chart) GetFont() *truetype.Font { + if c.Font == nil { + return c.defaultFont + } + return c.Font +} + +// GetWidth returns the chart width or the default value. +func (c Chart) GetWidth() int { + if c.Width == 0 { + return DefaultChartWidth + } + return c.Width +} + +// GetHeight returns the chart height or the default value. +func (c Chart) GetHeight() int { + if c.Height == 0 { + return DefaultChartHeight + } + return c.Height +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (c Chart) Render(rp RendererProvider, w io.Writer) error { + if len(c.Series) == 0 { + return errors.New("please provide at least one series") + } + if err := c.checkHasVisibleSeries(); err != nil { + return err + } + + c.YAxisSecondary.AxisType = YAxisSecondary + + r, err := rp(c.GetWidth(), c.GetHeight()) + if err != nil { + return err + } + + if c.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + c.defaultFont = defaultFont + } + r.SetDPI(c.GetDPI(DefaultDPI)) + + c.drawBackground(r) + + var xt, yt, yta []Tick + xr, yr, yra := c.getRanges() + canvasBox := c.getDefaultCanvasBox() + xf, yf, yfa := c.getValueFormatters() + + Debugf(c.Log, "chart; canvas box: %v", canvasBox) + + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + + err = c.checkRanges(xr, yr, yra) + if err != nil { + r.Save(w) + return err + } + + if c.hasAxes() { + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + canvasBox = c.getAxesAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xt, yt, yta) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + + Debugf(c.Log, "chart; axes adjusted canvas box: %v", canvasBox) + + // do a second pass in case things haven't settled yet. + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + canvasBox = c.getAxesAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xt, yt, yta) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + } + + if c.hasAnnotationSeries() { + canvasBox = c.getAnnotationAdjustedCanvasBox(r, canvasBox, xr, yr, yra, xf, yf, yfa) + xr, yr, yra = c.setRangeDomains(canvasBox, xr, yr, yra) + xt, yt, yta = c.getAxesTicks(r, xr, yr, yra, xf, yf, yfa) + + Debugf(c.Log, "chart; annotation adjusted canvas box: %v", canvasBox) + } + + c.drawCanvas(r, canvasBox) + c.drawAxes(r, canvasBox, xr, yr, yra, xt, yt, yta) + for index, series := range c.Series { + c.drawSeries(r, canvasBox, xr, yr, yra, series, index) + } + + c.drawTitle(r) + + for _, a := range c.Elements { + a(r, canvasBox, c.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (c Chart) checkHasVisibleSeries() error { + var style Style + for _, s := range c.Series { + style = s.GetStyle() + if !style.Hidden { + return nil + } + } + return fmt.Errorf("chart render; must have (1) visible series") +} + +func (c Chart) validateSeries() error { + var err error + for _, s := range c.Series { + err = s.Validate() + if err != nil { + return err + } + } + return nil +} + +func (c Chart) getRanges() (xrange, yrange, yrangeAlt Range) { + var minx, maxx float64 = math.MaxFloat64, -math.MaxFloat64 + var miny, maxy float64 = math.MaxFloat64, -math.MaxFloat64 + var minya, maxya float64 = math.MaxFloat64, -math.MaxFloat64 + + seriesMappedToSecondaryAxis := false + + // note: a possible future optimization is to not scan the series values if + // all axis are represented by either custom ticks or custom ranges. + for _, s := range c.Series { + if !s.GetStyle().Hidden { + seriesAxis := s.GetYAxis() + if bvp, isBoundedValuesProvider := s.(BoundedValuesProvider); isBoundedValuesProvider { + seriesLength := bvp.Len() + for index := 0; index < seriesLength; index++ { + vx, vy1, vy2 := bvp.GetBoundedValues(index) + + minx = math.Min(minx, vx) + maxx = math.Max(maxx, vx) + + if seriesAxis == YAxisPrimary { + miny = math.Min(miny, vy1) + miny = math.Min(miny, vy2) + maxy = math.Max(maxy, vy1) + maxy = math.Max(maxy, vy2) + } else if seriesAxis == YAxisSecondary { + minya = math.Min(minya, vy1) + minya = math.Min(minya, vy2) + maxya = math.Max(maxya, vy1) + maxya = math.Max(maxya, vy2) + seriesMappedToSecondaryAxis = true + } + } + } else if vp, isValuesProvider := s.(ValuesProvider); isValuesProvider { + seriesLength := vp.Len() + for index := 0; index < seriesLength; index++ { + vx, vy := vp.GetValues(index) + + minx = math.Min(minx, vx) + maxx = math.Max(maxx, vx) + + if seriesAxis == YAxisPrimary { + miny = math.Min(miny, vy) + maxy = math.Max(maxy, vy) + } else if seriesAxis == YAxisSecondary { + minya = math.Min(minya, vy) + maxya = math.Max(maxya, vy) + seriesMappedToSecondaryAxis = true + } + } + } + } + } + + if c.XAxis.Range == nil { + xrange = &ContinuousRange{} + } else { + xrange = c.XAxis.Range + } + + if c.YAxis.Range == nil { + yrange = &ContinuousRange{} + } else { + yrange = c.YAxis.Range + } + + if c.YAxisSecondary.Range == nil { + yrangeAlt = &ContinuousRange{} + } else { + yrangeAlt = c.YAxisSecondary.Range + } + + if len(c.XAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.XAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + xrange.SetMin(tickMin) + xrange.SetMax(tickMax) + } else if xrange.IsZero() { + xrange.SetMin(minx) + xrange.SetMax(maxx) + } + + if len(c.YAxis.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrange.SetMin(tickMin) + yrange.SetMax(tickMax) + } else if yrange.IsZero() { + yrange.SetMin(miny) + yrange.SetMax(maxy) + + if !c.YAxis.Style.Hidden { + delta := yrange.GetDelta() + roundTo := GetRoundToForDelta(delta) + rmin, rmax := RoundDown(yrange.GetMin(), roundTo), RoundUp(yrange.GetMax(), roundTo) + + yrange.SetMin(rmin) + yrange.SetMax(rmax) + } + } + + if len(c.YAxisSecondary.Ticks) > 0 { + tickMin, tickMax := math.MaxFloat64, -math.MaxFloat64 + for _, t := range c.YAxis.Ticks { + tickMin = math.Min(tickMin, t.Value) + tickMax = math.Max(tickMax, t.Value) + } + yrangeAlt.SetMin(tickMin) + yrangeAlt.SetMax(tickMax) + } else if seriesMappedToSecondaryAxis && yrangeAlt.IsZero() { + yrangeAlt.SetMin(minya) + yrangeAlt.SetMax(maxya) + + if !c.YAxisSecondary.Style.Hidden { + delta := yrangeAlt.GetDelta() + roundTo := GetRoundToForDelta(delta) + rmin, rmax := RoundDown(yrangeAlt.GetMin(), roundTo), RoundUp(yrangeAlt.GetMax(), roundTo) + yrangeAlt.SetMin(rmin) + yrangeAlt.SetMax(rmax) + } + } + + return +} + +func (c Chart) checkRanges(xr, yr, yra Range) error { + Debugf(c.Log, "checking xrange: %v", xr) + xDelta := xr.GetDelta() + if math.IsInf(xDelta, 0) { + return errors.New("infinite x-range delta") + } + if math.IsNaN(xDelta) { + return errors.New("nan x-range delta") + } + if xDelta == 0 { + return errors.New("zero x-range delta; there needs to be at least (2) values") + } + + Debugf(c.Log, "checking yrange: %v", yr) + yDelta := yr.GetDelta() + if math.IsInf(yDelta, 0) { + return errors.New("infinite y-range delta") + } + if math.IsNaN(yDelta) { + return errors.New("nan y-range delta") + } + + if c.hasSecondarySeries() { + Debugf(c.Log, "checking secondary yrange: %v", yra) + yraDelta := yra.GetDelta() + if math.IsInf(yraDelta, 0) { + return errors.New("infinite secondary y-range delta") + } + if math.IsNaN(yraDelta) { + return errors.New("nan secondary y-range delta") + } + } + + return nil +} + +func (c Chart) getDefaultCanvasBox() Box { + return c.Box() +} + +func (c Chart) getValueFormatters() (x, y, ya ValueFormatter) { + for _, s := range c.Series { + if vfp, isVfp := s.(ValueFormatterProvider); isVfp { + sx, sy := vfp.GetValueFormatters() + if s.GetYAxis() == YAxisPrimary { + x = sx + y = sy + } else if s.GetYAxis() == YAxisSecondary { + x = sx + ya = sy + } + } + } + if c.XAxis.ValueFormatter != nil { + x = c.XAxis.GetValueFormatter() + } + if c.YAxis.ValueFormatter != nil { + y = c.YAxis.GetValueFormatter() + } + if c.YAxisSecondary.ValueFormatter != nil { + ya = c.YAxisSecondary.GetValueFormatter() + } + return +} + +func (c Chart) hasAxes() bool { + return !c.XAxis.Style.Hidden || !c.YAxis.Style.Hidden || !c.YAxisSecondary.Style.Hidden +} + +func (c Chart) getAxesTicks(r Renderer, xr, yr, yar Range, xf, yf, yfa ValueFormatter) (xticks, yticks, yticksAlt []Tick) { + if !c.XAxis.Style.Hidden { + xticks = c.XAxis.GetTicks(r, xr, c.styleDefaultsAxes(), xf) + } + if !c.YAxis.Style.Hidden { + yticks = c.YAxis.GetTicks(r, yr, c.styleDefaultsAxes(), yf) + } + if !c.YAxisSecondary.Style.Hidden { + yticksAlt = c.YAxisSecondary.GetTicks(r, yar, c.styleDefaultsAxes(), yfa) + } + return +} + +func (c Chart) getAxesAdjustedCanvasBox(r Renderer, canvasBox Box, xr, yr, yra Range, xticks, yticks, yticksAlt []Tick) Box { + axesOuterBox := canvasBox.Clone() + if !c.XAxis.Style.Hidden { + axesBounds := c.XAxis.Measure(r, canvasBox, xr, c.styleDefaultsAxes(), xticks) + Debugf(c.Log, "chart; x-axis measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + if !c.YAxis.Style.Hidden { + axesBounds := c.YAxis.Measure(r, canvasBox, yr, c.styleDefaultsAxes(), yticks) + Debugf(c.Log, "chart; y-axis measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + if !c.YAxisSecondary.Style.Hidden && c.hasSecondarySeries() { + axesBounds := c.YAxisSecondary.Measure(r, canvasBox, yra, c.styleDefaultsAxes(), yticksAlt) + Debugf(c.Log, "chart; y-axis secondary measured %v", axesBounds) + axesOuterBox = axesOuterBox.Grow(axesBounds) + } + + return canvasBox.OuterConstrain(c.Box(), axesOuterBox) +} + +func (c Chart) setRangeDomains(canvasBox Box, xr, yr, yra Range) (Range, Range, Range) { + xr.SetDomain(canvasBox.Width()) + yr.SetDomain(canvasBox.Height()) + yra.SetDomain(canvasBox.Height()) + return xr, yr, yra +} + +func (c Chart) hasAnnotationSeries() bool { + for _, s := range c.Series { + if as, isAnnotationSeries := s.(AnnotationSeries); isAnnotationSeries { + if !as.GetStyle().Hidden { + return true + } + } + } + return false +} + +func (c Chart) hasSecondarySeries() bool { + for _, s := range c.Series { + if s.GetYAxis() == YAxisSecondary { + return true + } + } + return false +} + +func (c Chart) getAnnotationAdjustedCanvasBox(r Renderer, canvasBox Box, xr, yr, yra Range, xf, yf, yfa ValueFormatter) Box { + annotationSeriesBox := canvasBox.Clone() + for seriesIndex, s := range c.Series { + if as, isAnnotationSeries := s.(AnnotationSeries); isAnnotationSeries { + if !as.GetStyle().Hidden { + style := c.styleDefaultsSeries(seriesIndex) + var annotationBounds Box + if as.YAxis == YAxisPrimary { + annotationBounds = as.Measure(r, canvasBox, xr, yr, style) + } else if as.YAxis == YAxisSecondary { + annotationBounds = as.Measure(r, canvasBox, xr, yra, style) + } + + annotationSeriesBox = annotationSeriesBox.Grow(annotationBounds) + } + } + } + + return canvasBox.OuterConstrain(c.Box(), annotationSeriesBox) +} + +func (c Chart) getBackgroundStyle() Style { + return c.Background.InheritFrom(c.styleDefaultsBackground()) +} + +func (c Chart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: c.GetWidth(), + Bottom: c.GetHeight(), + }, c.getBackgroundStyle()) +} + +func (c Chart) getCanvasStyle() Style { + return c.Canvas.InheritFrom(c.styleDefaultsCanvas()) +} + +func (c Chart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, c.getCanvasStyle()) +} + +func (c Chart) drawAxes(r Renderer, canvasBox Box, xrange, yrange, yrangeAlt Range, xticks, yticks, yticksAlt []Tick) { + if !c.XAxis.Style.Hidden { + c.XAxis.Render(r, canvasBox, xrange, c.styleDefaultsAxes(), xticks) + } + if !c.YAxis.Style.Hidden { + c.YAxis.Render(r, canvasBox, yrange, c.styleDefaultsAxes(), yticks) + } + if !c.YAxisSecondary.Style.Hidden { + c.YAxisSecondary.Render(r, canvasBox, yrangeAlt, c.styleDefaultsAxes(), yticksAlt) + } +} + +func (c Chart) drawSeries(r Renderer, canvasBox Box, xrange, yrange, yrangeAlt Range, s Series, seriesIndex int) { + if !s.GetStyle().Hidden { + if s.GetYAxis() == YAxisPrimary { + s.Render(r, canvasBox, xrange, yrange, c.styleDefaultsSeries(seriesIndex)) + } else if s.GetYAxis() == YAxisSecondary { + s.Render(r, canvasBox, xrange, yrangeAlt, c.styleDefaultsSeries(seriesIndex)) + } + } +} + +func (c Chart) drawTitle(r Renderer) { + if len(c.Title) > 0 && !c.TitleStyle.Hidden { + r.SetFont(c.TitleStyle.GetFont(c.GetFont())) + r.SetFontColor(c.TitleStyle.GetFontColor(c.GetColorPalette().TextColor())) + titleFontSize := c.TitleStyle.GetFontSize(DefaultTitleFontSize) + r.SetFontSize(titleFontSize) + + textBox := r.MeasureText(c.Title) + + textWidth := textBox.Width() + textHeight := textBox.Height() + + titleX := (c.GetWidth() >> 1) - (textWidth >> 1) + titleY := c.TitleStyle.Padding.GetTop(DefaultTitleTop) + textHeight + + r.Text(c.Title, titleX, titleY) + } +} + +func (c Chart) styleDefaultsBackground() Style { + return Style{ + FillColor: c.GetColorPalette().BackgroundColor(), + StrokeColor: c.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultBackgroundStrokeWidth, + } +} + +func (c Chart) styleDefaultsCanvas() Style { + return Style{ + FillColor: c.GetColorPalette().CanvasColor(), + StrokeColor: c.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultCanvasStrokeWidth, + } +} + +func (c Chart) styleDefaultsSeries(seriesIndex int) Style { + return Style{ + DotColor: c.GetColorPalette().GetSeriesColor(seriesIndex), + StrokeColor: c.GetColorPalette().GetSeriesColor(seriesIndex), + StrokeWidth: DefaultSeriesLineWidth, + Font: c.GetFont(), + FontSize: DefaultFontSize, + } +} + +func (c Chart) styleDefaultsAxes() Style { + return Style{ + Font: c.GetFont(), + FontColor: c.GetColorPalette().TextColor(), + FontSize: DefaultAxisFontSize, + StrokeColor: c.GetColorPalette().AxisStrokeColor(), + StrokeWidth: DefaultAxisLineWidth, + } +} + +func (c Chart) styleDefaultsElements() Style { + return Style{ + Font: c.GetFont(), + } +} + +// GetColorPalette returns the color palette for the chart. +func (c Chart) GetColorPalette() ColorPalette { + if c.ColorPalette != nil { + return c.ColorPalette + } + return DefaultColorPalette +} + +// Box returns the chart bounds as a box. +func (c Chart) Box() Box { + dpr := c.Background.Padding.GetRight(DefaultBackgroundPadding.Right) + dpb := c.Background.Padding.GetBottom(DefaultBackgroundPadding.Bottom) + + return Box{ + Top: c.Background.Padding.GetTop(DefaultBackgroundPadding.Top), + Left: c.Background.Padding.GetLeft(DefaultBackgroundPadding.Left), + Right: c.GetWidth() - dpr, + Bottom: c.GetHeight() - dpb, + } +} diff --git a/chart_test.go b/chart_test.go new file mode 100644 index 0000000..8382a4c --- /dev/null +++ b/chart_test.go @@ -0,0 +1,594 @@ +package chart + +import ( + "bytes" + "image" + "image/png" + "math" + "testing" + "time" + + "github.com/wcharczuk/go-chart/v2/drawing" + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestChartGetDPI(t *testing.T) { + // replaced new assertions helper + + unset := Chart{} + testutil.AssertEqual(t, DefaultDPI, unset.GetDPI()) + testutil.AssertEqual(t, 192, unset.GetDPI(192)) + + set := Chart{DPI: 128} + testutil.AssertEqual(t, 128, set.GetDPI()) + testutil.AssertEqual(t, 128, set.GetDPI(192)) +} + +func TestChartGetFont(t *testing.T) { + // replaced new assertions helper + + f, err := GetDefaultFont() + testutil.AssertNil(t, err) + + unset := Chart{} + testutil.AssertNil(t, unset.GetFont()) + + set := Chart{Font: f} + testutil.AssertNotNil(t, set.GetFont()) +} + +func TestChartGetWidth(t *testing.T) { + // replaced new assertions helper + + unset := Chart{} + testutil.AssertEqual(t, DefaultChartWidth, unset.GetWidth()) + + set := Chart{Width: DefaultChartWidth + 10} + testutil.AssertEqual(t, DefaultChartWidth+10, set.GetWidth()) +} + +func TestChartGetHeight(t *testing.T) { + // replaced new assertions helper + + unset := Chart{} + testutil.AssertEqual(t, DefaultChartHeight, unset.GetHeight()) + + set := Chart{Height: DefaultChartHeight + 10} + testutil.AssertEqual(t, DefaultChartHeight+10, set.GetHeight()) +} + +func TestChartGetRanges(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: []float64{-2.0, -1.0, 0, 1.0, 2.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{-2.1, -1.0, 0, 1.0, 2.0}, + }, + ContinuousSeries{ + YAxis: YAxisSecondary, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{10.0, 11.0, 12.0, 13.0, 14.0}, + }, + }, + } + + xrange, yrange, yrangeAlt := c.getRanges() + testutil.AssertEqual(t, -2.0, xrange.GetMin()) + testutil.AssertEqual(t, 5.0, xrange.GetMax()) + + testutil.AssertEqual(t, -2.1, yrange.GetMin()) + testutil.AssertEqual(t, 4.5, yrange.GetMax()) + + testutil.AssertEqual(t, 10.0, yrangeAlt.GetMin()) + testutil.AssertEqual(t, 14.0, yrangeAlt.GetMax()) + + cSet := Chart{ + XAxis: XAxis{ + Range: &ContinuousRange{Min: 9.8, Max: 19.8}, + }, + YAxis: YAxis{ + Range: &ContinuousRange{Min: 9.9, Max: 19.9}, + }, + YAxisSecondary: YAxis{ + Range: &ContinuousRange{Min: 9.7, Max: 19.7}, + }, + Series: []Series{ + ContinuousSeries{ + XValues: []float64{-2.0, -1.0, 0, 1.0, 2.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{-2.1, -1.0, 0, 1.0, 2.0}, + }, + ContinuousSeries{ + YAxis: YAxisSecondary, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{10.0, 11.0, 12.0, 13.0, 14.0}, + }, + }, + } + + xr2, yr2, yra2 := cSet.getRanges() + testutil.AssertEqual(t, 9.8, xr2.GetMin()) + testutil.AssertEqual(t, 19.8, xr2.GetMax()) + + testutil.AssertEqual(t, 9.9, yr2.GetMin()) + testutil.AssertEqual(t, 19.9, yr2.GetMax()) + + testutil.AssertEqual(t, 9.7, yra2.GetMin()) + testutil.AssertEqual(t, 19.7, yra2.GetMax()) +} + +func TestChartGetRangesUseTicks(t *testing.T) { + // replaced new assertions helper + + // this test asserts that ticks should supercede manual ranges when generating the overall ranges. + + c := Chart{ + YAxis: YAxis{ + Ticks: []Tick{ + {0.0, "Zero"}, + {1.0, "1.0"}, + {2.0, "2.0"}, + {3.0, "3.0"}, + {4.0, "4.0"}, + {5.0, "Five"}, + }, + Range: &ContinuousRange{ + Min: -5.0, + Max: 5.0, + }, + }, + Series: []Series{ + ContinuousSeries{ + XValues: []float64{-2.0, -1.0, 0, 1.0, 2.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + }, + } + + xr, yr, yar := c.getRanges() + testutil.AssertEqual(t, -2.0, xr.GetMin()) + testutil.AssertEqual(t, 2.0, xr.GetMax()) + testutil.AssertEqual(t, 0.0, yr.GetMin()) + testutil.AssertEqual(t, 5.0, yr.GetMax()) + testutil.AssertTrue(t, yar.IsZero(), yar.String()) +} + +func TestChartGetRangesUseUserRanges(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + YAxis: YAxis{ + Range: &ContinuousRange{ + Min: -5.0, + Max: 5.0, + }, + }, + Series: []Series{ + ContinuousSeries{ + XValues: []float64{-2.0, -1.0, 0, 1.0, 2.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + }, + } + + xr, yr, yar := c.getRanges() + testutil.AssertEqual(t, -2.0, xr.GetMin()) + testutil.AssertEqual(t, 2.0, xr.GetMax()) + testutil.AssertEqual(t, -5.0, yr.GetMin()) + testutil.AssertEqual(t, 5.0, yr.GetMax()) + testutil.AssertTrue(t, yar.IsZero(), yar.String()) +} + +func TestChartGetBackgroundStyle(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Background: Style{ + FillColor: drawing.ColorBlack, + }, + } + + bs := c.getBackgroundStyle() + testutil.AssertEqual(t, bs.FillColor.String(), drawing.ColorBlack.String()) +} + +func TestChartGetCanvasStyle(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Canvas: Style{ + FillColor: drawing.ColorBlack, + }, + } + + bs := c.getCanvasStyle() + testutil.AssertEqual(t, bs.FillColor.String(), drawing.ColorBlack.String()) +} + +func TestChartGetDefaultCanvasBox(t *testing.T) { + // replaced new assertions helper + + c := Chart{} + canvasBoxDefault := c.getDefaultCanvasBox() + testutil.AssertFalse(t, canvasBoxDefault.IsZero()) + testutil.AssertEqual(t, DefaultBackgroundPadding.Top, canvasBoxDefault.Top) + testutil.AssertEqual(t, DefaultBackgroundPadding.Left, canvasBoxDefault.Left) + testutil.AssertEqual(t, c.GetWidth()-DefaultBackgroundPadding.Right, canvasBoxDefault.Right) + testutil.AssertEqual(t, c.GetHeight()-DefaultBackgroundPadding.Bottom, canvasBoxDefault.Bottom) + + custom := Chart{ + Background: Style{ + Padding: Box{ + Top: DefaultBackgroundPadding.Top + 1, + Left: DefaultBackgroundPadding.Left + 1, + Right: DefaultBackgroundPadding.Right + 1, + Bottom: DefaultBackgroundPadding.Bottom + 1, + }, + }, + } + canvasBoxCustom := custom.getDefaultCanvasBox() + testutil.AssertFalse(t, canvasBoxCustom.IsZero()) + testutil.AssertEqual(t, DefaultBackgroundPadding.Top+1, canvasBoxCustom.Top) + testutil.AssertEqual(t, DefaultBackgroundPadding.Left+1, canvasBoxCustom.Left) + testutil.AssertEqual(t, c.GetWidth()-(DefaultBackgroundPadding.Right+1), canvasBoxCustom.Right) + testutil.AssertEqual(t, c.GetHeight()-(DefaultBackgroundPadding.Bottom+1), canvasBoxCustom.Bottom) +} + +func TestChartGetValueFormatters(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: []float64{-2.0, -1.0, 0, 1.0, 2.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{-2.1, -1.0, 0, 1.0, 2.0}, + }, + ContinuousSeries{ + YAxis: YAxisSecondary, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{10.0, 11.0, 12.0, 13.0, 14.0}, + }, + }, + } + + dxf, dyf, dyaf := c.getValueFormatters() + testutil.AssertNotNil(t, dxf) + testutil.AssertNotNil(t, dyf) + testutil.AssertNotNil(t, dyaf) +} + +func TestChartHasAxes(t *testing.T) { + // replaced new assertions helper + + testutil.AssertTrue(t, Chart{}.hasAxes()) + testutil.AssertFalse(t, Chart{XAxis: XAxis{Style: Hidden()}, YAxis: YAxis{Style: Hidden()}, YAxisSecondary: YAxis{Style: Hidden()}}.hasAxes()) + + x := Chart{ + XAxis: XAxis{ + Style: Hidden(), + }, + YAxis: YAxis{ + Style: Shown(), + }, + YAxisSecondary: YAxis{ + Style: Hidden(), + }, + } + testutil.AssertTrue(t, x.hasAxes()) + + y := Chart{ + XAxis: XAxis{ + Style: Shown(), + }, + YAxis: YAxis{ + Style: Hidden(), + }, + YAxisSecondary: YAxis{ + Style: Hidden(), + }, + } + testutil.AssertTrue(t, y.hasAxes()) + + ya := Chart{ + XAxis: XAxis{ + Style: Hidden(), + }, + YAxis: YAxis{ + Style: Hidden(), + }, + YAxisSecondary: YAxis{ + Style: Shown(), + }, + } + testutil.AssertTrue(t, ya.hasAxes()) +} + +func TestChartGetAxesTicks(t *testing.T) { + // replaced new assertions helper + + r, err := PNG(1024, 1024) + testutil.AssertNil(t, err) + + c := Chart{ + XAxis: XAxis{ + Range: &ContinuousRange{Min: 9.8, Max: 19.8}, + }, + YAxis: YAxis{ + Range: &ContinuousRange{Min: 9.9, Max: 19.9}, + }, + YAxisSecondary: YAxis{ + Range: &ContinuousRange{Min: 9.7, Max: 19.7}, + }, + } + xr, yr, yar := c.getRanges() + + xt, yt, yat := c.getAxesTicks(r, xr, yr, yar, FloatValueFormatter, FloatValueFormatter, FloatValueFormatter) + testutil.AssertNotEmpty(t, xt) + testutil.AssertNotEmpty(t, yt) + testutil.AssertNotEmpty(t, yat) +} + +func TestChartSingleSeries(t *testing.T) { + // replaced new assertions helper + now := time.Now() + c := Chart{ + Title: "Hello!", + Width: 1024, + Height: 400, + YAxis: YAxis{ + Range: &ContinuousRange{ + Min: 0.0, + Max: 4.0, + }, + }, + Series: []Series{ + TimeSeries{ + Name: "goog", + XValues: []time.Time{now.AddDate(0, 0, -3), now.AddDate(0, 0, -2), now.AddDate(0, 0, -1)}, + YValues: []float64{1.0, 2.0, 3.0}, + }, + }, + } + + buffer := bytes.NewBuffer([]byte{}) + c.Render(PNG, buffer) + testutil.AssertNotEmpty(t, buffer.Bytes()) +} + +func TestChartRegressionBadRanges(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: []float64{math.Inf(1), math.Inf(1), math.Inf(1), math.Inf(1), math.Inf(1)}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 4.5}, + }, + }, + } + buffer := bytes.NewBuffer([]byte{}) + c.Render(PNG, buffer) + testutil.AssertTrue(t, true, "Render needs to finish.") +} + +func TestChartRegressionBadRangesByUser(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + YAxis: YAxis{ + Range: &ContinuousRange{ + Min: math.Inf(-1), + Max: math.Inf(1), // this could really happen? eh. + }, + }, + Series: []Series{ + ContinuousSeries{ + XValues: LinearRange(1.0, 10.0), + YValues: LinearRange(1.0, 10.0), + }, + }, + } + buffer := bytes.NewBuffer([]byte{}) + c.Render(PNG, buffer) + testutil.AssertTrue(t, true, "Render needs to finish.") +} + +func TestChartValidatesSeries(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: LinearRange(1.0, 10.0), + YValues: LinearRange(1.0, 10.0), + }, + }, + } + + testutil.AssertNil(t, c.validateSeries()) + + c = Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: LinearRange(1.0, 10.0), + }, + }, + } + + testutil.AssertNotNil(t, c.validateSeries()) +} + +func TestChartCheckRanges(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Series: []Series{ + ContinuousSeries{ + XValues: []float64{1.0, 2.0}, + YValues: []float64{3.10, 3.14}, + }, + }, + } + + xr, yr, yra := c.getRanges() + testutil.AssertNil(t, c.checkRanges(xr, yr, yra)) +} + +func TestChartCheckRangesWithRanges(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + XAxis: XAxis{ + Range: &ContinuousRange{ + Min: 0, + Max: 10, + }, + }, + YAxis: YAxis{ + Range: &ContinuousRange{ + Min: 0, + Max: 5, + }, + }, + Series: []Series{ + ContinuousSeries{ + XValues: []float64{1.0, 2.0}, + YValues: []float64{3.14, 3.14}, + }, + }, + } + + xr, yr, yra := c.getRanges() + testutil.AssertNil(t, c.checkRanges(xr, yr, yra)) +} + +func at(i image.Image, x, y int) drawing.Color { + return drawing.ColorFromAlphaMixedRGBA(i.At(x, y).RGBA()) +} + +func TestChartE2ELine(t *testing.T) { + // replaced new assertions helper + + c := Chart{ + Height: 50, + Width: 50, + TitleStyle: Hidden(), + XAxis: HideXAxis(), + YAxis: HideYAxis(), + YAxisSecondary: HideYAxis(), + Canvas: Style{ + Padding: BoxZero, + }, + Background: Style{ + Padding: BoxZero, + }, + Series: []Series{ + ContinuousSeries{ + XValues: LinearRangeWithStep(0, 4, 1), + YValues: LinearRangeWithStep(0, 4, 1), + }, + }, + } + + var buffer = &bytes.Buffer{} + err := c.Render(PNG, buffer) + testutil.AssertNil(t, err) + + // do color tests ... + + i, err := png.Decode(buffer) + testutil.AssertNil(t, err) + + // test the bottom and top of the line + testutil.AssertEqual(t, drawing.ColorWhite, at(i, 0, 0)) + testutil.AssertEqual(t, drawing.ColorWhite, at(i, 49, 49)) + + // test a line mid point + defaultSeriesColor := GetDefaultColor(0) + testutil.AssertEqual(t, defaultSeriesColor, at(i, 0, 49)) + testutil.AssertEqual(t, defaultSeriesColor, at(i, 49, 0)) + testutil.AssertEqual(t, drawing.ColorFromHex("bddbf6"), at(i, 24, 24)) +} + +func TestChartE2ELineWithFill(t *testing.T) { + // replaced new assertions helper + + logBuffer := new(bytes.Buffer) + + c := Chart{ + Height: 50, + Width: 50, + Canvas: Style{ + Padding: BoxZero, + }, + Background: Style{ + Padding: BoxZero, + }, + TitleStyle: Hidden(), + XAxis: HideXAxis(), + YAxis: HideYAxis(), + YAxisSecondary: HideYAxis(), + Series: []Series{ + ContinuousSeries{ + Style: Style{ + StrokeColor: drawing.ColorBlue, + FillColor: drawing.ColorRed, + }, + XValues: LinearRangeWithStep(0, 4, 1), + YValues: LinearRangeWithStep(0, 4, 1), + }, + }, + Log: NewLogger(OptLoggerStdout(logBuffer), OptLoggerStderr(logBuffer)), + } + + testutil.AssertEqual(t, 5, len(c.Series[0].(ContinuousSeries).XValues)) + testutil.AssertEqual(t, 5, len(c.Series[0].(ContinuousSeries).YValues)) + + var buffer = &bytes.Buffer{} + err := c.Render(PNG, buffer) + testutil.AssertNil(t, err) + + i, err := png.Decode(buffer) + testutil.AssertNil(t, err) + + // test the bottom and top of the line + testutil.AssertEqual(t, drawing.ColorWhite, at(i, 0, 0)) + testutil.AssertEqual(t, drawing.ColorRed, at(i, 49, 49)) + + // test a line mid point + defaultSeriesColor := drawing.ColorBlue + testutil.AssertEqual(t, defaultSeriesColor, at(i, 0, 49)) + testutil.AssertEqual(t, defaultSeriesColor, at(i, 49, 0)) +} + +func Test_Chart_cve(t *testing.T) { + poc := StackedBarChart{ + Title: "poc", + Bars: []StackedBar{ + { + Name: "11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111", + Values: []Value{ + {Value: 1, Label: "infinite"}, + {Value: 1, Label: "loop"}, + }, + }, + }, + } + + var imgContent bytes.Buffer + err := poc.Render(PNG, &imgContent) + testutil.AssertNotNil(t, err) +} diff --git a/cmd/chart/main.go b/cmd/chart/main.go new file mode 100644 index 0000000..82ed907 --- /dev/null +++ b/cmd/chart/main.go @@ -0,0 +1,148 @@ +package main + +import ( + "flag" + "fmt" + "io/ioutil" + "os" + "strings" + + "github.com/wcharczuk/go-chart/v2" +) + +var ( + outputPath = flag.String("output", "", "The output file") + + inputFormat = flag.String("format", "csv", "The input format, either 'csv' or 'tsv' (defaults to 'csv')") + inputPath = flag.String("f", "", "The input file") + reverse = flag.Bool("reverse", false, "If we should reverse the inputs") + + hideLegend = flag.Bool("hide-legend", false, "If we should omit the chart legend") + hideSMA = flag.Bool("hide-sma", false, "If we should omit simple moving average") + hideLinreg = flag.Bool("hide-linreg", false, "If we should omit linear regressions") + hideLastValues = flag.Bool("hide-last-values", false, "If we should omit last values") +) + +func main() { + flag.Parse() + log := chart.NewLogger() + + var rawData []byte + var err error + if *inputPath != "" { + if *inputPath == "-" { + rawData, err = ioutil.ReadAll(os.Stdin) + if err != nil { + log.FatalErr(err) + } + } else { + rawData, err = ioutil.ReadFile(*inputPath) + if err != nil { + log.FatalErr(err) + } + } + } else if len(flag.Args()) > 0 { + rawData = []byte(flag.Args()[0]) + } else { + flag.Usage() + os.Exit(1) + } + + var parts []string + switch *inputFormat { + case "csv": + parts = chart.SplitCSV(string(rawData)) + case "tsv": + parts = strings.Split(string(rawData), "\t") + default: + log.FatalErr(fmt.Errorf("invalid format; must be 'csv' or 'tsv'")) + } + + yvalues, err := chart.ParseFloats(parts...) + if err != nil { + log.FatalErr(err) + } + + if *reverse { + yvalues = chart.ValueSequence(yvalues...).Reverse().Values() + } + + var series []chart.Series + mainSeries := chart.ContinuousSeries{ + Name: "Values", + XValues: chart.LinearRange(1, float64(len(yvalues))), + YValues: yvalues, + } + series = append(series, mainSeries) + + smaSeries := &chart.SMASeries{ + Name: "SMA", + Style: chart.Style{ + Hidden: *hideSMA, + StrokeColor: chart.ColorRed, + StrokeDashArray: []float64{5.0, 5.0}, + }, + InnerSeries: mainSeries, + } + series = append(series, smaSeries) + + linRegSeries := &chart.LinearRegressionSeries{ + Name: "Values - Lin. Reg.", + Style: chart.Style{ + Hidden: *hideLinreg, + }, + InnerSeries: mainSeries, + } + series = append(series, linRegSeries) + + mainLastValue := chart.LastValueAnnotationSeries(mainSeries) + mainLastValue.Style = chart.Style{ + Hidden: *hideLastValues, + } + series = append(series, mainLastValue) + + linregLastValue := chart.LastValueAnnotationSeries(linRegSeries) + linregLastValue.Style = chart.Style{ + Hidden: (*hideLastValues || *hideLinreg), + } + series = append(series, linregLastValue) + + smaLastValue := chart.LastValueAnnotationSeries(smaSeries) + smaLastValue.Style = chart.Style{ + Hidden: (*hideLastValues || *hideSMA), + } + series = append(series, smaLastValue) + + graph := chart.Chart{ + Background: chart.Style{ + Padding: chart.Box{ + Top: 50, + }, + }, + Series: series, + } + + if !*hideLegend { + graph.Elements = []chart.Renderable{chart.LegendThin(&graph)} + } + + var output *os.File + if *outputPath != "" { + output, err = os.Create(*outputPath) + if err != nil { + log.FatalErr(err) + } + } else { + output, err = ioutil.TempFile("", "*.png") + if err != nil { + log.FatalErr(err) + } + } + + if err := graph.Render(chart.PNG, output); err != nil { + log.FatalErr(err) + } + + fmt.Fprintln(os.Stdout, output.Name()) + os.Exit(0) +} diff --git a/colors.go b/colors.go new file mode 100644 index 0000000..b51f9ea --- /dev/null +++ b/colors.go @@ -0,0 +1,184 @@ +package chart + +import "github.com/wcharczuk/go-chart/v2/drawing" + +var ( + // ColorWhite is white. + ColorWhite = drawing.Color{R: 255, G: 255, B: 255, A: 255} + // ColorBlue is the basic theme blue color. + ColorBlue = drawing.Color{R: 0, G: 116, B: 217, A: 255} + // ColorCyan is the basic theme cyan color. + ColorCyan = drawing.Color{R: 0, G: 217, B: 210, A: 255} + // ColorGreen is the basic theme green color. + ColorGreen = drawing.Color{R: 0, G: 217, B: 101, A: 255} + // ColorRed is the basic theme red color. + ColorRed = drawing.Color{R: 217, G: 0, B: 116, A: 255} + // ColorOrange is the basic theme orange color. + ColorOrange = drawing.Color{R: 217, G: 101, B: 0, A: 255} + // ColorYellow is the basic theme yellow color. + ColorYellow = drawing.Color{R: 217, G: 210, B: 0, A: 255} + // ColorBlack is the basic theme black color. + ColorBlack = drawing.Color{R: 51, G: 51, B: 51, A: 255} + // ColorLightGray is the basic theme light gray color. + ColorLightGray = drawing.Color{R: 239, G: 239, B: 239, A: 255} + + // ColorAlternateBlue is a alternate theme color. + ColorAlternateBlue = drawing.Color{R: 106, G: 195, B: 203, A: 255} + // ColorAlternateGreen is a alternate theme color. + ColorAlternateGreen = drawing.Color{R: 42, G: 190, B: 137, A: 255} + // ColorAlternateGray is a alternate theme color. + ColorAlternateGray = drawing.Color{R: 110, G: 128, B: 139, A: 255} + // ColorAlternateYellow is a alternate theme color. + ColorAlternateYellow = drawing.Color{R: 240, G: 174, B: 90, A: 255} + // ColorAlternateLightGray is a alternate theme color. + ColorAlternateLightGray = drawing.Color{R: 187, G: 190, B: 191, A: 255} + + // ColorTransparent is a transparent (alpha zero) color. + ColorTransparent = drawing.Color{R: 1, G: 1, B: 1, A: 0} +) + +var ( + // DefaultBackgroundColor is the default chart background color. + // It is equivalent to css color:white. + DefaultBackgroundColor = ColorWhite + // DefaultBackgroundStrokeColor is the default chart border color. + // It is equivalent to color:white. + DefaultBackgroundStrokeColor = ColorWhite + // DefaultCanvasColor is the default chart canvas color. + // It is equivalent to css color:white. + DefaultCanvasColor = ColorWhite + // DefaultCanvasStrokeColor is the default chart canvas stroke color. + // It is equivalent to css color:white. + DefaultCanvasStrokeColor = ColorWhite + // DefaultTextColor is the default chart text color. + // It is equivalent to #333333. + DefaultTextColor = ColorBlack + // DefaultAxisColor is the default chart axis line color. + // It is equivalent to #333333. + DefaultAxisColor = ColorBlack + // DefaultStrokeColor is the default chart border color. + // It is equivalent to #efefef. + DefaultStrokeColor = ColorLightGray + // DefaultFillColor is the default fill color. + // It is equivalent to #0074d9. + DefaultFillColor = ColorBlue + // DefaultAnnotationFillColor is the default annotation background color. + DefaultAnnotationFillColor = ColorWhite + // DefaultGridLineColor is the default grid line color. + DefaultGridLineColor = ColorLightGray +) + +var ( + // DefaultColors are a couple default series colors. + DefaultColors = []drawing.Color{ + ColorBlue, + ColorGreen, + ColorRed, + ColorCyan, + ColorOrange, + } + + // DefaultAlternateColors are a couple alternate colors. + DefaultAlternateColors = []drawing.Color{ + ColorAlternateBlue, + ColorAlternateGreen, + ColorAlternateGray, + ColorAlternateYellow, + ColorBlue, + ColorGreen, + ColorRed, + ColorCyan, + ColorOrange, + } +) + +// GetDefaultColor returns a color from the default list by index. +// NOTE: the index will wrap around (using a modulo). +func GetDefaultColor(index int) drawing.Color { + finalIndex := index % len(DefaultColors) + return DefaultColors[finalIndex] +} + +// GetAlternateColor returns a color from the default list by index. +// NOTE: the index will wrap around (using a modulo). +func GetAlternateColor(index int) drawing.Color { + finalIndex := index % len(DefaultAlternateColors) + return DefaultAlternateColors[finalIndex] +} + +// ColorPalette is a set of colors that. +type ColorPalette interface { + BackgroundColor() drawing.Color + BackgroundStrokeColor() drawing.Color + CanvasColor() drawing.Color + CanvasStrokeColor() drawing.Color + AxisStrokeColor() drawing.Color + TextColor() drawing.Color + GetSeriesColor(index int) drawing.Color +} + +// DefaultColorPalette represents the default palatte. +var DefaultColorPalette defaultColorPalette + +type defaultColorPalette struct{} + +func (dp defaultColorPalette) BackgroundColor() drawing.Color { + return DefaultBackgroundColor +} + +func (dp defaultColorPalette) BackgroundStrokeColor() drawing.Color { + return DefaultBackgroundStrokeColor +} + +func (dp defaultColorPalette) CanvasColor() drawing.Color { + return DefaultCanvasColor +} + +func (dp defaultColorPalette) CanvasStrokeColor() drawing.Color { + return DefaultCanvasStrokeColor +} + +func (dp defaultColorPalette) AxisStrokeColor() drawing.Color { + return DefaultAxisColor +} + +func (dp defaultColorPalette) TextColor() drawing.Color { + return DefaultTextColor +} + +func (dp defaultColorPalette) GetSeriesColor(index int) drawing.Color { + return GetDefaultColor(index) +} + +// AlternateColorPalette represents the default palatte. +var AlternateColorPalette alternateColorPalette + +type alternateColorPalette struct{} + +func (ap alternateColorPalette) BackgroundColor() drawing.Color { + return DefaultBackgroundColor +} + +func (ap alternateColorPalette) BackgroundStrokeColor() drawing.Color { + return DefaultBackgroundStrokeColor +} + +func (ap alternateColorPalette) CanvasColor() drawing.Color { + return DefaultCanvasColor +} + +func (ap alternateColorPalette) CanvasStrokeColor() drawing.Color { + return DefaultCanvasStrokeColor +} + +func (ap alternateColorPalette) AxisStrokeColor() drawing.Color { + return DefaultAxisColor +} + +func (ap alternateColorPalette) TextColor() drawing.Color { + return DefaultTextColor +} + +func (ap alternateColorPalette) GetSeriesColor(index int) drawing.Color { + return GetAlternateColor(index) +} diff --git a/concat_series.go b/concat_series.go new file mode 100644 index 0000000..edec7e5 --- /dev/null +++ b/concat_series.go @@ -0,0 +1,44 @@ +package chart + +// ConcatSeries is a special type of series that concatenates its `InnerSeries`. +type ConcatSeries []Series + +// Len returns the length of the concatenated set of series. +func (cs ConcatSeries) Len() int { + total := 0 + for _, s := range cs { + if typed, isValuesProvider := s.(ValuesProvider); isValuesProvider { + total += typed.Len() + } + } + + return total +} + +// GetValue returns the value at the (meta) index (i.e 0 => totalLen-1) +func (cs ConcatSeries) GetValue(index int) (x, y float64) { + cursor := 0 + for _, s := range cs { + if typed, isValuesProvider := s.(ValuesProvider); isValuesProvider { + len := typed.Len() + if index < cursor+len { + x, y = typed.GetValues(index - cursor) //FENCEPOSTS. + return + } + cursor += typed.Len() + } + } + return +} + +// Validate validates the series. +func (cs ConcatSeries) Validate() error { + var err error + for _, s := range cs { + err = s.Validate() + if err != nil { + return err + } + } + return nil +} diff --git a/concat_series_test.go b/concat_series_test.go new file mode 100644 index 0000000..9424fb2 --- /dev/null +++ b/concat_series_test.go @@ -0,0 +1,41 @@ +package chart + +import ( + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestConcatSeries(t *testing.T) { + // replaced new assertions helper + + s1 := ContinuousSeries{ + XValues: LinearRange(1.0, 10.0), + YValues: LinearRange(1.0, 10.0), + } + + s2 := ContinuousSeries{ + XValues: LinearRange(11, 20.0), + YValues: LinearRange(10.0, 1.0), + } + + s3 := ContinuousSeries{ + XValues: LinearRange(21, 30.0), + YValues: LinearRange(1.0, 10.0), + } + + cs := ConcatSeries([]Series{s1, s2, s3}) + testutil.AssertEqual(t, 30, cs.Len()) + + x0, y0 := cs.GetValue(0) + testutil.AssertEqual(t, 1.0, x0) + testutil.AssertEqual(t, 1.0, y0) + + xm, ym := cs.GetValue(19) + testutil.AssertEqual(t, 20.0, xm) + testutil.AssertEqual(t, 1.0, ym) + + xn, yn := cs.GetValue(29) + testutil.AssertEqual(t, 30.0, xn) + testutil.AssertEqual(t, 10.0, yn) +} diff --git a/continuous_range.go b/continuous_range.go new file mode 100644 index 0000000..517b727 --- /dev/null +++ b/continuous_range.go @@ -0,0 +1,81 @@ +package chart + +import ( + "fmt" + "math" +) + +// ContinuousRange represents a boundary for a set of numbers. +type ContinuousRange struct { + Min float64 + Max float64 + Domain int + Descending bool +} + +// IsDescending returns if the range is descending. +func (r ContinuousRange) IsDescending() bool { + return r.Descending +} + +// IsZero returns if the ContinuousRange has been set or not. +func (r ContinuousRange) IsZero() bool { + return (r.Min == 0 || math.IsNaN(r.Min)) && + (r.Max == 0 || math.IsNaN(r.Max)) && + r.Domain == 0 +} + +// GetMin gets the min value for the continuous range. +func (r ContinuousRange) GetMin() float64 { + return r.Min +} + +// SetMin sets the min value for the continuous range. +func (r *ContinuousRange) SetMin(min float64) { + r.Min = min +} + +// GetMax returns the max value for the continuous range. +func (r ContinuousRange) GetMax() float64 { + return r.Max +} + +// SetMax sets the max value for the continuous range. +func (r *ContinuousRange) SetMax(max float64) { + r.Max = max +} + +// GetDelta returns the difference between the min and max value. +func (r ContinuousRange) GetDelta() float64 { + return r.Max - r.Min +} + +// GetDomain returns the range domain. +func (r ContinuousRange) GetDomain() int { + return r.Domain +} + +// SetDomain sets the range domain. +func (r *ContinuousRange) SetDomain(domain int) { + r.Domain = domain +} + +// String returns a simple string for the ContinuousRange. +func (r ContinuousRange) String() string { + if r.GetDelta() == 0 { + return "ContinuousRange [empty]" + } + return fmt.Sprintf("ContinuousRange [%.2f,%.2f] => %d", r.Min, r.Max, r.Domain) +} + +// Translate maps a given value into the ContinuousRange space. +func (r ContinuousRange) Translate(value float64) int { + normalized := value - r.Min + ratio := normalized / r.GetDelta() + + if r.IsDescending() { + return r.Domain - int(math.Ceil(ratio*float64(r.Domain))) + } + + return int(math.Ceil(ratio * float64(r.Domain))) +} diff --git a/continuous_range_test.go b/continuous_range_test.go new file mode 100644 index 0000000..5d0f436 --- /dev/null +++ b/continuous_range_test.go @@ -0,0 +1,22 @@ +package chart + +import ( + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestRangeTranslate(t *testing.T) { + // replaced new assertions helper + values := []float64{1.0, 2.0, 2.5, 2.7, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0} + r := ContinuousRange{Domain: 1000} + r.Min, r.Max = MinMax(values...) + + // delta = ~7.0 + // value = ~5.0 + // domain = ~1000 + // 5/8 * 1000 ~= + testutil.AssertEqual(t, 0, r.Translate(1.0)) + testutil.AssertEqual(t, 1000, r.Translate(8.0)) + testutil.AssertEqual(t, 572, r.Translate(5.0)) +} diff --git a/continuous_series.go b/continuous_series.go new file mode 100644 index 0000000..73c7ab7 --- /dev/null +++ b/continuous_series.go @@ -0,0 +1,96 @@ +package chart + +import "fmt" + +// Interface Assertions. +var ( + _ Series = (*ContinuousSeries)(nil) + _ FirstValuesProvider = (*ContinuousSeries)(nil) + _ LastValuesProvider = (*ContinuousSeries)(nil) +) + +// ContinuousSeries represents a line on a chart. +type ContinuousSeries struct { + Name string + Style Style + + YAxis YAxisType + + XValueFormatter ValueFormatter + YValueFormatter ValueFormatter + + XValues []float64 + YValues []float64 +} + +// GetName returns the name of the time series. +func (cs ContinuousSeries) GetName() string { + return cs.Name +} + +// GetStyle returns the line style. +func (cs ContinuousSeries) GetStyle() Style { + return cs.Style +} + +// Len returns the number of elements in the series. +func (cs ContinuousSeries) Len() int { + return len(cs.XValues) +} + +// GetValues gets the x,y values at a given index. +func (cs ContinuousSeries) GetValues(index int) (float64, float64) { + return cs.XValues[index], cs.YValues[index] +} + +// GetFirstValues gets the first x,y values. +func (cs ContinuousSeries) GetFirstValues() (float64, float64) { + return cs.XValues[0], cs.YValues[0] +} + +// GetLastValues gets the last x,y values. +func (cs ContinuousSeries) GetLastValues() (float64, float64) { + return cs.XValues[len(cs.XValues)-1], cs.YValues[len(cs.YValues)-1] +} + +// GetValueFormatters returns value formatter defaults for the series. +func (cs ContinuousSeries) GetValueFormatters() (x, y ValueFormatter) { + if cs.XValueFormatter != nil { + x = cs.XValueFormatter + } else { + x = FloatValueFormatter + } + if cs.YValueFormatter != nil { + y = cs.YValueFormatter + } else { + y = FloatValueFormatter + } + return +} + +// GetYAxis returns which YAxis the series draws on. +func (cs ContinuousSeries) GetYAxis() YAxisType { + return cs.YAxis +} + +// Render renders the series. +func (cs ContinuousSeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := cs.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, cs) +} + +// Validate validates the series. +func (cs ContinuousSeries) Validate() error { + if len(cs.XValues) == 0 { + return fmt.Errorf("continuous series; must have xvalues set") + } + + if len(cs.YValues) == 0 { + return fmt.Errorf("continuous series; must have yvalues set") + } + + if len(cs.XValues) != len(cs.YValues) { + return fmt.Errorf("continuous series; must have same length xvalues as yvalues") + } + return nil +} diff --git a/continuous_series_test.go b/continuous_series_test.go new file mode 100644 index 0000000..783c236 --- /dev/null +++ b/continuous_series_test.go @@ -0,0 +1,72 @@ +package chart + +import ( + "fmt" + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestContinuousSeries(t *testing.T) { + // replaced new assertions helper + + cs := ContinuousSeries{ + Name: "Test Series", + XValues: LinearRange(1.0, 10.0), + YValues: LinearRange(1.0, 10.0), + } + + testutil.AssertEqual(t, "Test Series", cs.GetName()) + testutil.AssertEqual(t, 10, cs.Len()) + x0, y0 := cs.GetValues(0) + testutil.AssertEqual(t, 1.0, x0) + testutil.AssertEqual(t, 1.0, y0) + + xn, yn := cs.GetValues(9) + testutil.AssertEqual(t, 10.0, xn) + testutil.AssertEqual(t, 10.0, yn) + + xn, yn = cs.GetLastValues() + testutil.AssertEqual(t, 10.0, xn) + testutil.AssertEqual(t, 10.0, yn) +} + +func TestContinuousSeriesValueFormatter(t *testing.T) { + // replaced new assertions helper + + cs := ContinuousSeries{ + XValueFormatter: func(v interface{}) string { + return fmt.Sprintf("%f foo", v) + }, + YValueFormatter: func(v interface{}) string { + return fmt.Sprintf("%f bar", v) + }, + } + + xf, yf := cs.GetValueFormatters() + testutil.AssertEqual(t, "0.100000 foo", xf(0.1)) + testutil.AssertEqual(t, "0.100000 bar", yf(0.1)) +} + +func TestContinuousSeriesValidate(t *testing.T) { + // replaced new assertions helper + + cs := ContinuousSeries{ + Name: "Test Series", + XValues: LinearRange(1.0, 10.0), + YValues: LinearRange(1.0, 10.0), + } + testutil.AssertNil(t, cs.Validate()) + + cs = ContinuousSeries{ + Name: "Test Series", + XValues: LinearRange(1.0, 10.0), + } + testutil.AssertNotNil(t, cs.Validate()) + + cs = ContinuousSeries{ + Name: "Test Series", + YValues: LinearRange(1.0, 10.0), + } + testutil.AssertNotNil(t, cs.Validate()) +} diff --git a/defaults.go b/defaults.go new file mode 100644 index 0000000..d74330f --- /dev/null +++ b/defaults.go @@ -0,0 +1,103 @@ +package chart + +const ( + // DefaultChartHeight is the default chart height. + DefaultChartHeight = 400 + // DefaultChartWidth is the default chart width. + DefaultChartWidth = 1024 + // DefaultStrokeWidth is the default chart stroke width. + DefaultStrokeWidth = 0.0 + // DefaultDotWidth is the default chart dot width. + DefaultDotWidth = 0.0 + // DefaultSeriesLineWidth is the default line width. + DefaultSeriesLineWidth = 1.0 + // DefaultAxisLineWidth is the line width of the axis lines. + DefaultAxisLineWidth = 1.0 + //DefaultDPI is the default dots per inch for the chart. + DefaultDPI = 92.0 + // DefaultMinimumFontSize is the default minimum font size. + DefaultMinimumFontSize = 8.0 + // DefaultFontSize is the default font size. + DefaultFontSize = 10.0 + // DefaultTitleFontSize is the default title font size. + DefaultTitleFontSize = 18.0 + // DefaultAnnotationDeltaWidth is the width of the left triangle out of annotations. + DefaultAnnotationDeltaWidth = 10 + // DefaultAnnotationFontSize is the font size of annotations. + DefaultAnnotationFontSize = 10.0 + // DefaultAxisFontSize is the font size of the axis labels. + DefaultAxisFontSize = 10.0 + // DefaultTitleTop is the default distance from the top of the chart to put the title. + DefaultTitleTop = 10 + + // DefaultBackgroundStrokeWidth is the default stroke on the chart background. + DefaultBackgroundStrokeWidth = 0.0 + // DefaultCanvasStrokeWidth is the default stroke on the chart canvas. + DefaultCanvasStrokeWidth = 0.0 + + // DefaultLineSpacing is the default vertical distance between lines of text. + DefaultLineSpacing = 5 + + // DefaultYAxisMargin is the default distance from the right of the canvas to the y axis labels. + DefaultYAxisMargin = 10 + // DefaultXAxisMargin is the default distance from bottom of the canvas to the x axis labels. + DefaultXAxisMargin = 10 + + //DefaultVerticalTickHeight is half the margin. + DefaultVerticalTickHeight = DefaultXAxisMargin >> 1 + //DefaultHorizontalTickWidth is half the margin. + DefaultHorizontalTickWidth = DefaultYAxisMargin >> 1 + + // DefaultTickCount is the default number of ticks to show + DefaultTickCount = 10 + // DefaultTickCountSanityCheck is a hard limit on number of ticks to prevent infinite loops. + DefaultTickCountSanityCheck = 1 << 10 //1024 + + // DefaultMinimumTickHorizontalSpacing is the minimum distance between horizontal ticks. + DefaultMinimumTickHorizontalSpacing = 20 + // DefaultMinimumTickVerticalSpacing is the minimum distance between vertical ticks. + DefaultMinimumTickVerticalSpacing = 20 + + // DefaultDateFormat is the default date format. + DefaultDateFormat = "2006-01-02" + // DefaultDateHourFormat is the date format for hour timestamp formats. + DefaultDateHourFormat = "01-02 3PM" + // DefaultDateMinuteFormat is the date format for minute range timestamp formats. + DefaultDateMinuteFormat = "01-02 3:04PM" + // DefaultFloatFormat is the default float format. + DefaultFloatFormat = "%.2f" + // DefaultPercentValueFormat is the default percent format. + DefaultPercentValueFormat = "%0.2f%%" + + // DefaultBarSpacing is the default pixel spacing between bars. + DefaultBarSpacing = 100 + // DefaultBarWidth is the default pixel width of bars in a bar chart. + DefaultBarWidth = 50 +) + +var ( + // DashArrayDots is a dash array that represents '....' style stroke dashes. + DashArrayDots = []int{1, 1} + // DashArrayDashesSmall is a dash array that represents '- - -' style stroke dashes. + DashArrayDashesSmall = []int{3, 3} + // DashArrayDashesMedium is a dash array that represents '-- -- --' style stroke dashes. + DashArrayDashesMedium = []int{5, 5} + // DashArrayDashesLarge is a dash array that represents '----- ----- -----' style stroke dashes. + DashArrayDashesLarge = []int{10, 10} +) + +var ( + // DefaultAnnotationPadding is the padding around an annotation. + DefaultAnnotationPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5} + + // DefaultBackgroundPadding is the default canvas padding config. + DefaultBackgroundPadding = Box{Top: 5, Left: 5, Right: 5, Bottom: 5} +) + +const ( + // ContentTypePNG is the png mime type. + ContentTypePNG = "image/png" + + // ContentTypeSVG is the svg mime type. + ContentTypeSVG = "image/svg+xml" +) diff --git a/donut_chart.go b/donut_chart.go new file mode 100644 index 0000000..f5a7854 --- /dev/null +++ b/donut_chart.go @@ -0,0 +1,315 @@ +package chart + +import ( + "errors" + "fmt" + "io" + + "github.com/golang/freetype/truetype" +) + +// DonutChart is a chart that draws sections of a circle based on percentages with an hole. +type DonutChart struct { + Title string + TitleStyle Style + + ColorPalette ColorPalette + + Width int + Height int + DPI float64 + + Background Style + Canvas Style + SliceStyle Style + + Font *truetype.Font + defaultFont *truetype.Font + + Values []Value + Elements []Renderable +} + +// GetDPI returns the dpi for the chart. +func (pc DonutChart) GetDPI(defaults ...float64) float64 { + if pc.DPI == 0 { + if len(defaults) > 0 { + return defaults[0] + } + return DefaultDPI + } + return pc.DPI +} + +// GetFont returns the text font. +func (pc DonutChart) GetFont() *truetype.Font { + if pc.Font == nil { + return pc.defaultFont + } + return pc.Font +} + +// GetWidth returns the chart width or the default value. +func (pc DonutChart) GetWidth() int { + if pc.Width == 0 { + return DefaultChartWidth + } + return pc.Width +} + +// GetHeight returns the chart height or the default value. +func (pc DonutChart) GetHeight() int { + if pc.Height == 0 { + return DefaultChartWidth + } + return pc.Height +} + +// Render renders the chart with the given renderer to the given io.Writer. +func (pc DonutChart) Render(rp RendererProvider, w io.Writer) error { + if len(pc.Values) == 0 { + return errors.New("please provide at least one value") + } + + r, err := rp(pc.GetWidth(), pc.GetHeight()) + if err != nil { + return err + } + + if pc.Font == nil { + defaultFont, err := GetDefaultFont() + if err != nil { + return err + } + pc.defaultFont = defaultFont + } + r.SetDPI(pc.GetDPI(DefaultDPI)) + + canvasBox := pc.getDefaultCanvasBox() + canvasBox = pc.getCircleAdjustedCanvasBox(canvasBox) + + pc.drawBackground(r) + pc.drawCanvas(r, canvasBox) + + finalValues, err := pc.finalizeValues(pc.Values) + if err != nil { + return err + } + pc.drawSlices(r, canvasBox, finalValues) + pc.drawTitle(r) + for _, a := range pc.Elements { + a(r, canvasBox, pc.styleDefaultsElements()) + } + + return r.Save(w) +} + +func (pc DonutChart) drawBackground(r Renderer) { + Draw.Box(r, Box{ + Right: pc.GetWidth(), + Bottom: pc.GetHeight(), + }, pc.getBackgroundStyle()) +} + +func (pc DonutChart) drawCanvas(r Renderer, canvasBox Box) { + Draw.Box(r, canvasBox, pc.getCanvasStyle()) +} + +func (pc DonutChart) drawTitle(r Renderer) { + if len(pc.Title) > 0 && !pc.TitleStyle.Hidden { + Draw.TextWithin(r, pc.Title, pc.Box(), pc.styleDefaultsTitle()) + } +} + +func (pc DonutChart) drawSlices(r Renderer, canvasBox Box, values []Value) { + cx, cy := canvasBox.Center() + diameter := MinInt(canvasBox.Width(), canvasBox.Height()) + radius := float64(diameter>>1) / 1.1 + labelRadius := (radius * 2.83) / 3.0 + + // draw the donut slices + var rads, delta, delta2, total float64 + var lx, ly int + + if len(values) == 1 { + pc.styleDonutChartValue(0).WriteToRenderer(r) + r.MoveTo(cx, cy) + r.Circle(radius, cx, cy) + } else { + for index, v := range values { + v.Style.InheritFrom(pc.styleDonutChartValue(index)).WriteToRenderer(r) + r.MoveTo(cx, cy) + rads = PercentToRadians(total) + delta = PercentToRadians(v.Value) + + r.ArcTo(cx, cy, (radius / 1.25), (radius / 1.25), rads, delta) + + r.LineTo(cx, cy) + r.Close() + r.FillStroke() + total = total + v.Value + } + } + + //making the donut hole + v := Value{Value: 100, Label: "center"} + styletemp := pc.SliceStyle.InheritFrom(Style{ + StrokeColor: ColorWhite, StrokeWidth: 4.0, FillColor: ColorWhite, FontColor: ColorWhite, //Font: pc.GetFont(),//FontSize: pc.getScaledFontSize(), + }) + v.Style.InheritFrom(styletemp).WriteToRenderer(r) + r.MoveTo(cx, cy) + r.ArcTo(cx, cy, (radius / 3.5), (radius / 3.5), DegreesToRadians(0), DegreesToRadians(359)) + r.LineTo(cx, cy) + r.Close() + r.FillStroke() + + // draw the labels + total = 0 + for index, v := range values { + v.Style.InheritFrom(pc.styleDonutChartValue(index)).WriteToRenderer(r) + if len(v.Label) > 0 { + delta2 = PercentToRadians(total + (v.Value / 2.0)) + delta2 = RadianAdd(delta2, _pi2) + lx, ly = CirclePoint(cx, cy, labelRadius, delta2) + + tb := r.MeasureText(v.Label) + lx = lx - (tb.Width() >> 1) + ly = ly + (tb.Height() >> 1) + + r.Text(v.Label, lx, ly) + } + total = total + v.Value + } +} + +func (pc DonutChart) finalizeValues(values []Value) ([]Value, error) { + finalValues := Values(values).Normalize() + if len(finalValues) == 0 { + return nil, fmt.Errorf("donut chart must contain at least (1) non-zero value") + } + return finalValues, nil +} + +func (pc DonutChart) getDefaultCanvasBox() Box { + return pc.Box() +} + +func (pc DonutChart) getCircleAdjustedCanvasBox(canvasBox Box) Box { + circleDiameter := MinInt(canvasBox.Width(), canvasBox.Height()) + + square := Box{ + Right: circleDiameter, + Bottom: circleDiameter, + } + + return canvasBox.Fit(square) +} + +func (pc DonutChart) getBackgroundStyle() Style { + return pc.Background.InheritFrom(pc.styleDefaultsBackground()) +} + +func (pc DonutChart) getCanvasStyle() Style { + return pc.Canvas.InheritFrom(pc.styleDefaultsCanvas()) +} + +func (pc DonutChart) styleDefaultsCanvas() Style { + return Style{ + FillColor: pc.GetColorPalette().CanvasColor(), + StrokeColor: pc.GetColorPalette().CanvasStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc DonutChart) styleDefaultsDonutChartValue() Style { + return Style{ + StrokeColor: pc.GetColorPalette().TextColor(), + StrokeWidth: 4.0, + FillColor: pc.GetColorPalette().TextColor(), + } +} + +func (pc DonutChart) styleDonutChartValue(index int) Style { + return pc.SliceStyle.InheritFrom(Style{ + StrokeColor: ColorWhite, + StrokeWidth: 4.0, + FillColor: pc.GetColorPalette().GetSeriesColor(index), + FontSize: pc.getScaledFontSize(), + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + }) +} + +func (pc DonutChart) getScaledFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48.0 + } else if effectiveDimension >= 1024 { + return 24.0 + } else if effectiveDimension > 512 { + return 18.0 + } else if effectiveDimension > 256 { + return 12.0 + } + return 10.0 +} + +func (pc DonutChart) styleDefaultsBackground() Style { + return Style{ + FillColor: pc.GetColorPalette().BackgroundColor(), + StrokeColor: pc.GetColorPalette().BackgroundStrokeColor(), + StrokeWidth: DefaultStrokeWidth, + } +} + +func (pc DonutChart) styleDefaultsElements() Style { + return Style{ + Font: pc.GetFont(), + } +} + +func (pc DonutChart) styleDefaultsTitle() Style { + return pc.TitleStyle.InheritFrom(Style{ + FontColor: pc.GetColorPalette().TextColor(), + Font: pc.GetFont(), + FontSize: pc.getTitleFontSize(), + TextHorizontalAlign: TextHorizontalAlignCenter, + TextVerticalAlign: TextVerticalAlignTop, + TextWrap: TextWrapWord, + }) +} + +func (pc DonutChart) getTitleFontSize() float64 { + effectiveDimension := MinInt(pc.GetWidth(), pc.GetHeight()) + if effectiveDimension >= 2048 { + return 48 + } else if effectiveDimension >= 1024 { + return 24 + } else if effectiveDimension >= 512 { + return 18 + } else if effectiveDimension >= 256 { + return 12 + } + return 10 +} + +// GetColorPalette returns the color palette for the chart. +func (pc DonutChart) GetColorPalette() ColorPalette { + if pc.ColorPalette != nil { + return pc.ColorPalette + } + return AlternateColorPalette +} + +// Box returns the chart bounds as a box. +func (pc DonutChart) Box() Box { + dpr := pc.Background.Padding.GetRight(DefaultBackgroundPadding.Right) + dpb := pc.Background.Padding.GetBottom(DefaultBackgroundPadding.Bottom) + + return Box{ + Top: pc.Background.Padding.GetTop(DefaultBackgroundPadding.Top), + Left: pc.Background.Padding.GetLeft(DefaultBackgroundPadding.Left), + Right: pc.GetWidth() - dpr, + Bottom: pc.GetHeight() - dpb, + } +} diff --git a/donut_chart_test.go b/donut_chart_test.go new file mode 100644 index 0000000..388f65d --- /dev/null +++ b/donut_chart_test.go @@ -0,0 +1,69 @@ +package chart + +import ( + "bytes" + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestDonutChart(t *testing.T) { + // replaced new assertions helper + + pie := DonutChart{ + Canvas: Style{ + FillColor: ColorLightGray, + }, + Values: []Value{ + {Value: 10, Label: "Blue"}, + {Value: 9, Label: "Green"}, + {Value: 8, Label: "Gray"}, + {Value: 7, Label: "Orange"}, + {Value: 6, Label: "HEANG"}, + {Value: 5, Label: "??"}, + {Value: 2, Label: "!!"}, + }, + } + + b := bytes.NewBuffer([]byte{}) + pie.Render(PNG, b) + testutil.AssertNotZero(t, b.Len()) +} + +func TestDonutChartDropsZeroValues(t *testing.T) { + // replaced new assertions helper + + pie := DonutChart{ + Canvas: Style{ + FillColor: ColorLightGray, + }, + Values: []Value{ + {Value: 5, Label: "Blue"}, + {Value: 5, Label: "Green"}, + {Value: 0, Label: "Gray"}, + }, + } + + b := bytes.NewBuffer([]byte{}) + err := pie.Render(PNG, b) + testutil.AssertNil(t, err) +} + +func TestDonutChartAllZeroValues(t *testing.T) { + // replaced new assertions helper + + pie := DonutChart{ + Canvas: Style{ + FillColor: ColorLightGray, + }, + Values: []Value{ + {Value: 0, Label: "Blue"}, + {Value: 0, Label: "Green"}, + {Value: 0, Label: "Gray"}, + }, + } + + b := bytes.NewBuffer([]byte{}) + err := pie.Render(PNG, b) + testutil.AssertNotNil(t, err) +} diff --git a/draw.go b/draw.go new file mode 100644 index 0000000..e188079 --- /dev/null +++ b/draw.go @@ -0,0 +1,325 @@ +package chart + +import ( + "math" +) + +var ( + // Draw contains helpers for drawing common objects. + Draw = &draw{} +) + +type draw struct{} + +// LineSeries draws a line series with a renderer. +func (d draw) LineSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, vs ValuesProvider) { + if vs.Len() == 0 { + return + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + v0x, v0y := vs.GetValues(0) + x0 := cl + xrange.Translate(v0x) + y0 := cb - yrange.Translate(v0y) + + yv0 := yrange.Translate(0) + + var vx, vy float64 + var x, y int + + if style.ShouldDrawStroke() && style.ShouldDrawFill() { + style.GetFillOptions().WriteDrawingOptionsToRenderer(r) + r.MoveTo(x0, y0) + for i := 1; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + r.LineTo(x, y) + } + r.LineTo(x, MinInt(cb, cb-yv0)) + r.LineTo(x0, MinInt(cb, cb-yv0)) + r.LineTo(x0, y0) + r.Fill() + } + + if style.ShouldDrawStroke() { + style.GetStrokeOptions().WriteDrawingOptionsToRenderer(r) + + r.MoveTo(x0, y0) + for i := 1; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + r.LineTo(x, y) + } + r.Stroke() + } + + if style.ShouldDrawDot() { + defaultDotWidth := style.GetDotWidth() + + style.GetDotOptions().WriteDrawingOptionsToRenderer(r) + for i := 0; i < vs.Len(); i++ { + vx, vy = vs.GetValues(i) + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy) + + dotWidth := defaultDotWidth + if style.DotWidthProvider != nil { + dotWidth = style.DotWidthProvider(xrange, yrange, i, vx, vy) + } + + if style.DotColorProvider != nil { + dotColor := style.DotColorProvider(xrange, yrange, i, vx, vy) + + r.SetFillColor(dotColor) + r.SetStrokeColor(dotColor) + } + + r.Circle(dotWidth, x, y) + r.FillStroke() + } + } +} + +// BoundedSeries draws a series that implements BoundedValuesProvider. +func (d draw) BoundedSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, bbs BoundedValuesProvider, drawOffsetIndexes ...int) { + drawOffsetIndex := 0 + if len(drawOffsetIndexes) > 0 { + drawOffsetIndex = drawOffsetIndexes[0] + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + v0x, v0y1, v0y2 := bbs.GetBoundedValues(0) + x0 := cl + xrange.Translate(v0x) + y0 := cb - yrange.Translate(v0y1) + + var vx, vy1, vy2 float64 + var x, y int + + xvalues := make([]float64, bbs.Len()) + xvalues[0] = v0x + y2values := make([]float64, bbs.Len()) + y2values[0] = v0y2 + + style.GetFillAndStrokeOptions().WriteToRenderer(r) + r.MoveTo(x0, y0) + for i := 1; i < bbs.Len(); i++ { + vx, vy1, vy2 = bbs.GetBoundedValues(i) + + xvalues[i] = vx + y2values[i] = vy2 + + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy1) + if i > drawOffsetIndex { + r.LineTo(x, y) + } else { + r.MoveTo(x, y) + } + } + y = cb - yrange.Translate(vy2) + r.LineTo(x, y) + for i := bbs.Len() - 1; i >= drawOffsetIndex; i-- { + vx, vy2 = xvalues[i], y2values[i] + x = cl + xrange.Translate(vx) + y = cb - yrange.Translate(vy2) + r.LineTo(x, y) + } + r.Close() + r.FillStroke() +} + +// HistogramSeries draws a value provider as boxes from 0. +func (d draw) HistogramSeries(r Renderer, canvasBox Box, xrange, yrange Range, style Style, vs ValuesProvider, barWidths ...int) { + if vs.Len() == 0 { + return + } + + //calculate bar width? + seriesLength := vs.Len() + barWidth := int(math.Floor(float64(xrange.GetDomain()) / float64(seriesLength))) + if len(barWidths) > 0 { + barWidth = barWidths[0] + } + + cb := canvasBox.Bottom + cl := canvasBox.Left + + //foreach datapoint, draw a box. + for index := 0; index < seriesLength; index++ { + vx, vy := vs.GetValues(index) + y0 := yrange.Translate(0) + x := cl + xrange.Translate(vx) + y := yrange.Translate(vy) + + d.Box(r, Box{ + Top: cb - y0, + Left: x - (barWidth >> 1), + Right: x + (barWidth >> 1), + Bottom: cb - y, + }, style) + } +} + +// MeasureAnnotation measures how big an annotation would be. +func (d draw) MeasureAnnotation(r Renderer, canvasBox Box, style Style, lx, ly int, label string) Box { + style.WriteToRenderer(r) + defer r.ResetStyle() + + textBox := r.MeasureText(label) + textWidth := textBox.Width() + textHeight := textBox.Height() + halfTextHeight := textHeight >> 1 + + pt := style.Padding.GetTop(DefaultAnnotationPadding.Top) + pl := style.Padding.GetLeft(DefaultAnnotationPadding.Left) + pr := style.Padding.GetRight(DefaultAnnotationPadding.Right) + pb := style.Padding.GetBottom(DefaultAnnotationPadding.Bottom) + + strokeWidth := style.GetStrokeWidth() + + top := ly - (pt + halfTextHeight) + right := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + int(strokeWidth) + bottom := ly + (pb + halfTextHeight) + + return Box{ + Top: top, + Left: lx, + Right: right, + Bottom: bottom, + } +} + +// Annotation draws an anotation with a renderer. +func (d draw) Annotation(r Renderer, canvasBox Box, style Style, lx, ly int, label string) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + textBox := r.MeasureText(label) + textWidth := textBox.Width() + halfTextHeight := textBox.Height() >> 1 + + style.GetFillAndStrokeOptions().WriteToRenderer(r) + + pt := style.Padding.GetTop(DefaultAnnotationPadding.Top) + pl := style.Padding.GetLeft(DefaultAnnotationPadding.Left) + pr := style.Padding.GetRight(DefaultAnnotationPadding.Right) + pb := style.Padding.GetBottom(DefaultAnnotationPadding.Bottom) + + textX := lx + pl + DefaultAnnotationDeltaWidth + textY := ly + halfTextHeight + + ltx := lx + DefaultAnnotationDeltaWidth + lty := ly - (pt + halfTextHeight) + + rtx := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + rty := ly - (pt + halfTextHeight) + + rbx := lx + pl + pr + textWidth + DefaultAnnotationDeltaWidth + rby := ly + (pb + halfTextHeight) + + lbx := lx + DefaultAnnotationDeltaWidth + lby := ly + (pb + halfTextHeight) + + r.MoveTo(lx, ly) + r.LineTo(ltx, lty) + r.LineTo(rtx, rty) + r.LineTo(rbx, rby) + r.LineTo(lbx, lby) + r.LineTo(lx, ly) + r.Close() + r.FillStroke() + + style.GetTextOptions().WriteToRenderer(r) + r.Text(label, textX, textY) +} + +// Box draws a box with a given style. +func (d draw) Box(r Renderer, b Box, s Style) { + s.GetFillAndStrokeOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.MoveTo(b.Left, b.Top) + r.LineTo(b.Right, b.Top) + r.LineTo(b.Right, b.Bottom) + r.LineTo(b.Left, b.Bottom) + r.LineTo(b.Left, b.Top) + r.FillStroke() +} + +func (d draw) BoxRotated(r Renderer, b Box, thetaDegrees float64, s Style) { + d.BoxCorners(r, b.Corners().Rotate(thetaDegrees), s) +} + +func (d draw) BoxCorners(r Renderer, bc BoxCorners, s Style) { + s.GetFillAndStrokeOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.MoveTo(bc.TopLeft.X, bc.TopLeft.Y) + r.LineTo(bc.TopRight.X, bc.TopRight.Y) + r.LineTo(bc.BottomRight.X, bc.BottomRight.Y) + r.LineTo(bc.BottomLeft.X, bc.BottomLeft.Y) + r.Close() + r.FillStroke() +} + +// DrawText draws text with a given style. +func (d draw) Text(r Renderer, text string, x, y int, style Style) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + r.Text(text, x, y) +} + +func (d draw) MeasureText(r Renderer, text string, style Style) Box { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + return r.MeasureText(text) +} + +// TextWithin draws the text within a given box. +func (d draw) TextWithin(r Renderer, text string, box Box, style Style) { + style.GetTextOptions().WriteToRenderer(r) + defer r.ResetStyle() + + lines := Text.WrapFit(r, text, box.Width(), style) + linesBox := Text.MeasureLines(r, lines, style) + + y := box.Top + + switch style.GetTextVerticalAlign() { + case TextVerticalAlignBottom, TextVerticalAlignBaseline: // i have to build better baseline handling into measure text + y = y - linesBox.Height() + case TextVerticalAlignMiddle: + y = y + (box.Height() >> 1) - (linesBox.Height() >> 1) + case TextVerticalAlignMiddleBaseline: + y = y + (box.Height() >> 1) - linesBox.Height() + } + + var tx, ty int + for _, line := range lines { + lineBox := r.MeasureText(line) + switch style.GetTextHorizontalAlign() { + case TextHorizontalAlignCenter: + tx = box.Left + ((box.Width() - lineBox.Width()) >> 1) + case TextHorizontalAlignRight: + tx = box.Right - lineBox.Width() + default: + tx = box.Left + } + if style.TextRotationDegrees == 0 { + ty = y + lineBox.Height() + } else { + ty = y + } + + r.Text(line, tx, ty) + y += lineBox.Height() + style.GetTextLineSpacing() + } +} diff --git a/drawing/README.md b/drawing/README.md new file mode 100644 index 0000000..a97cb30 --- /dev/null +++ b/drawing/README.md @@ -0,0 +1,5 @@ +go-chart > drawing +================== + +The bulk of the code in this package is based on [draw2d](https://github.com/llgcode/draw2d), but +with significant modifications to make the APIs more golang friendly and careful about units (points vs. pixels). \ No newline at end of file diff --git a/drawing/color.go b/drawing/color.go new file mode 100644 index 0000000..4b865d7 --- /dev/null +++ b/drawing/color.go @@ -0,0 +1,274 @@ +package drawing + +import ( + "fmt" + "regexp" + "strconv" + "strings" +) + +// Basic Colors from: +// https://www.w3.org/wiki/CSS/Properties/color/keywords +var ( + // ColorTransparent is a fully transparent color. + ColorTransparent = Color{R: 255, G: 255, B: 255, A: 0} + // ColorWhite is white. + ColorWhite = Color{R: 255, G: 255, B: 255, A: 255} + // ColorBlack is black. + ColorBlack = Color{R: 0, G: 0, B: 0, A: 255} + // ColorRed is red. + ColorRed = Color{R: 255, G: 0, B: 0, A: 255} + // ColorGreen is green. + ColorGreen = Color{R: 0, G: 128, B: 0, A: 255} + // ColorBlue is blue. + ColorBlue = Color{R: 0, G: 0, B: 255, A: 255} + // ColorSilver is a known color. + ColorSilver = Color{R: 192, G: 192, B: 192, A: 255} + // ColorMaroon is a known color. + ColorMaroon = Color{R: 128, G: 0, B: 0, A: 255} + // ColorPurple is a known color. + ColorPurple = Color{R: 128, G: 0, B: 128, A: 255} + // ColorFuchsia is a known color. + ColorFuchsia = Color{R: 255, G: 0, B: 255, A: 255} + // ColorLime is a known color. + ColorLime = Color{R: 0, G: 255, B: 0, A: 255} + // ColorOlive is a known color. + ColorOlive = Color{R: 128, G: 128, B: 0, A: 255} + // ColorYellow is a known color. + ColorYellow = Color{R: 255, G: 255, B: 0, A: 255} + // ColorNavy is a known color. + ColorNavy = Color{R: 0, G: 0, B: 128, A: 255} + // ColorTeal is a known color. + ColorTeal = Color{R: 0, G: 128, B: 128, A: 255} + // ColorAqua is a known color. + ColorAqua = Color{R: 0, G: 255, B: 255, A: 255} +) + +func parseHex(hex string) uint8 { + v, _ := strconv.ParseInt(hex, 16, 16) + return uint8(v) +} + +// ParseColor parses a color from a string. +func ParseColor(rawColor string) Color { + if strings.HasPrefix(rawColor, "rgba") { + return ColorFromRGBA(rawColor) + } + if strings.HasPrefix(rawColor, "rgb") { + return ColorFromRGB(rawColor) + } + if strings.HasPrefix(rawColor, "#") { + return ColorFromHex(rawColor) + } + return ColorFromKnown(rawColor) +} + +var rgbaexpr = regexp.MustCompile(`rgba\((?P.+),(?P.+),(?P.+),(?P.+)\)`) + +// ColorFromRGBA returns a color from an `rgba()` css function. +func ColorFromRGBA(rgba string) (output Color) { + values := rgbaexpr.FindStringSubmatch(rgba) + for i, name := range rgbaexpr.SubexpNames() { + if i == 0 { + continue + } + if i >= len(values) { + break + } + switch name { + case "R": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.R = uint8(parsed) + case "G": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.G = uint8(parsed) + case "B": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.B = uint8(parsed) + case "A": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseFloat(value, 32) + if parsed > 1 { + parsed = 1 + } else if parsed < 0 { + parsed = 0 + } + output.A = uint8(parsed * 255) + } + } + return +} + +var rgbexpr = regexp.MustCompile(`rgb\((?P.+),(?P.+),(?P.+)\)`) + +// ColorFromRGB returns a color from an `rgb()` css function. +func ColorFromRGB(rgb string) (output Color) { + output.A = 255 + values := rgbexpr.FindStringSubmatch(rgb) + for i, name := range rgbaexpr.SubexpNames() { + if i == 0 { + continue + } + if i >= len(values) { + break + } + switch name { + case "R": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.R = uint8(parsed) + case "G": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.G = uint8(parsed) + case "B": + value := strings.TrimSpace(values[i]) + parsed, _ := strconv.ParseInt(value, 10, 16) + output.B = uint8(parsed) + } + } + return +} + +// ColorFromHex returns a color from a css hex code. +// +// NOTE: it will trim a leading '#' character if present. +func ColorFromHex(hex string) Color { + if strings.HasPrefix(hex, "#") { + hex = strings.TrimPrefix(hex, "#") + } + var c Color + if len(hex) == 3 { + c.R = parseHex(string(hex[0])) * 0x11 + c.G = parseHex(string(hex[1])) * 0x11 + c.B = parseHex(string(hex[2])) * 0x11 + } else { + c.R = parseHex(string(hex[0:2])) + c.G = parseHex(string(hex[2:4])) + c.B = parseHex(string(hex[4:6])) + } + c.A = 255 + return c +} + +// ColorFromKnown returns an internal color from a known (basic) color name. +func ColorFromKnown(known string) Color { + switch strings.ToLower(known) { + case "transparent": + return ColorTransparent + case "white": + return ColorWhite + case "black": + return ColorBlack + case "red": + return ColorRed + case "blue": + return ColorBlue + case "green": + return ColorGreen + case "silver": + return ColorSilver + case "maroon": + return ColorMaroon + case "purple": + return ColorPurple + case "fuchsia": + return ColorFuchsia + case "lime": + return ColorLime + case "olive": + return ColorOlive + case "yellow": + return ColorYellow + case "navy": + return ColorNavy + case "teal": + return ColorTeal + case "aqua": + return ColorAqua + default: + return Color{} + } +} + +// ColorFromAlphaMixedRGBA returns the system alpha mixed rgba values. +func ColorFromAlphaMixedRGBA(r, g, b, a uint32) Color { + fa := float64(a) / 255.0 + var c Color + c.R = uint8(float64(r) / fa) + c.G = uint8(float64(g) / fa) + c.B = uint8(float64(b) / fa) + c.A = uint8(a | (a >> 8)) + return c +} + +// ColorChannelFromFloat returns a normalized byte from a given float value. +func ColorChannelFromFloat(v float64) uint8 { + return uint8(v * 255) +} + +// Color is our internal color type because color.Color is bullshit. +type Color struct { + R, G, B, A uint8 +} + +// RGBA returns the color as a pre-alpha mixed color set. +func (c Color) RGBA() (r, g, b, a uint32) { + fa := float64(c.A) / 255.0 + r = uint32(float64(uint32(c.R)) * fa) + r |= r << 8 + g = uint32(float64(uint32(c.G)) * fa) + g |= g << 8 + b = uint32(float64(uint32(c.B)) * fa) + b |= b << 8 + a = uint32(c.A) + a |= a << 8 + return +} + +// IsZero returns if the color has been set or not. +func (c Color) IsZero() bool { + return c.R == 0 && c.G == 0 && c.B == 0 && c.A == 0 +} + +// IsTransparent returns if the colors alpha channel is zero. +func (c Color) IsTransparent() bool { + return c.A == 0 +} + +// WithAlpha returns a copy of the color with a given alpha. +func (c Color) WithAlpha(a uint8) Color { + return Color{ + R: c.R, + G: c.G, + B: c.B, + A: a, + } +} + +// Equals returns true if the color equals another. +func (c Color) Equals(other Color) bool { + return c.R == other.R && + c.G == other.G && + c.B == other.B && + c.A == other.A +} + +// AverageWith averages two colors. +func (c Color) AverageWith(other Color) Color { + return Color{ + R: (c.R + other.R) >> 1, + G: (c.G + other.G) >> 1, + B: (c.B + other.B) >> 1, + A: c.A, + } +} + +// String returns a css string representation of the color. +func (c Color) String() string { + fa := float64(c.A) / float64(255) + return fmt.Sprintf("rgba(%v,%v,%v,%.1f)", c.R, c.G, c.B, fa) +} diff --git a/drawing/color_test.go b/drawing/color_test.go new file mode 100644 index 0000000..a3abd19 --- /dev/null +++ b/drawing/color_test.go @@ -0,0 +1,114 @@ +package drawing + +import ( + "fmt" + "testing" + + "image/color" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +func TestColorFromHex(t *testing.T) { + white := ColorFromHex("FFFFFF") + testutil.AssertEqual(t, ColorWhite, white) + + shortWhite := ColorFromHex("FFF") + testutil.AssertEqual(t, ColorWhite, shortWhite) + + black := ColorFromHex("000000") + testutil.AssertEqual(t, ColorBlack, black) + + shortBlack := ColorFromHex("000") + testutil.AssertEqual(t, ColorBlack, shortBlack) + + red := ColorFromHex("FF0000") + testutil.AssertEqual(t, ColorRed, red) + + shortRed := ColorFromHex("F00") + testutil.AssertEqual(t, ColorRed, shortRed) + + green := ColorFromHex("008000") + testutil.AssertEqual(t, ColorGreen, green) + + // shortGreen := ColorFromHex("0F0") + // testutil.AssertEqual(t, ColorGreen, shortGreen) + + blue := ColorFromHex("0000FF") + testutil.AssertEqual(t, ColorBlue, blue) + + shortBlue := ColorFromHex("00F") + testutil.AssertEqual(t, ColorBlue, shortBlue) +} + +func TestColorFromHex_handlesHash(t *testing.T) { + withHash := ColorFromHex("#FF0000") + testutil.AssertEqual(t, ColorRed, withHash) + + withoutHash := ColorFromHex("#FF0000") + testutil.AssertEqual(t, ColorRed, withoutHash) +} + +func TestColorFromAlphaMixedRGBA(t *testing.T) { + black := ColorFromAlphaMixedRGBA(color.Black.RGBA()) + testutil.AssertTrue(t, black.Equals(ColorBlack), black.String()) + + white := ColorFromAlphaMixedRGBA(color.White.RGBA()) + testutil.AssertTrue(t, white.Equals(ColorWhite), white.String()) +} + +func Test_ColorFromRGBA(t *testing.T) { + value := "rgba(192, 192, 192, 1.0)" + parsed := ColorFromRGBA(value) + testutil.AssertEqual(t, ColorSilver, parsed) + + value = "rgba(192,192,192,1.0)" + parsed = ColorFromRGBA(value) + testutil.AssertEqual(t, ColorSilver, parsed) + + value = "rgba(192,192,192,1.5)" + parsed = ColorFromRGBA(value) + testutil.AssertEqual(t, ColorSilver, parsed) +} + +func TestParseColor(t *testing.T) { + testCases := [...]struct { + Input string + Expected Color + }{ + {"", Color{}}, + {"white", ColorWhite}, + {"WHITE", ColorWhite}, // caps! + {"black", ColorBlack}, + {"red", ColorRed}, + {"green", ColorGreen}, + {"blue", ColorBlue}, + {"silver", ColorSilver}, + {"maroon", ColorMaroon}, + {"purple", ColorPurple}, + {"fuchsia", ColorFuchsia}, + {"lime", ColorLime}, + {"olive", ColorOlive}, + {"yellow", ColorYellow}, + {"navy", ColorNavy}, + {"teal", ColorTeal}, + {"aqua", ColorAqua}, + + {"rgba(192, 192, 192, 1.0)", ColorSilver}, + {"rgba(192,192,192,1.0)", ColorSilver}, + {"rgb(192, 192, 192)", ColorSilver}, + {"rgb(192,192,192)", ColorSilver}, + + {"#FF0000", ColorRed}, + {"#008000", ColorGreen}, + {"#0000FF", ColorBlue}, + {"#F00", ColorRed}, + {"#080", Color{0, 136, 0, 255}}, + {"#00F", ColorBlue}, + } + + for index, tc := range testCases { + actual := ParseColor(tc.Input) + testutil.AssertEqual(t, tc.Expected, actual, fmt.Sprintf("test case: %d -> %s", index, tc.Input)) + } +} diff --git a/drawing/constants.go b/drawing/constants.go new file mode 100644 index 0000000..2fb154e --- /dev/null +++ b/drawing/constants.go @@ -0,0 +1,6 @@ +package drawing + +const ( + // DefaultDPI is the default image DPI. + DefaultDPI = 96.0 +) diff --git a/drawing/curve.go b/drawing/curve.go new file mode 100644 index 0000000..c33efcc --- /dev/null +++ b/drawing/curve.go @@ -0,0 +1,185 @@ +package drawing + +import "math" + +const ( + // CurveRecursionLimit represents the maximum recursion that is really necessary to subsivide a curve into straight lines + CurveRecursionLimit = 32 +) + +// Cubic +// x1, y1, cpx1, cpy1, cpx2, cpy2, x2, y2 float64 + +// SubdivideCubic a Bezier cubic curve in 2 equivalents Bezier cubic curves. +// c1 and c2 parameters are the resulting curves +func SubdivideCubic(c, c1, c2 []float64) { + // First point of c is the first point of c1 + c1[0], c1[1] = c[0], c[1] + // Last point of c is the last point of c2 + c2[6], c2[7] = c[6], c[7] + + // Subdivide segment using midpoints + c1[2] = (c[0] + c[2]) / 2 + c1[3] = (c[1] + c[3]) / 2 + + midX := (c[2] + c[4]) / 2 + midY := (c[3] + c[5]) / 2 + + c2[4] = (c[4] + c[6]) / 2 + c2[5] = (c[5] + c[7]) / 2 + + c1[4] = (c1[2] + midX) / 2 + c1[5] = (c1[3] + midY) / 2 + + c2[2] = (midX + c2[4]) / 2 + c2[3] = (midY + c2[5]) / 2 + + c1[6] = (c1[4] + c2[2]) / 2 + c1[7] = (c1[5] + c2[3]) / 2 + + // Last Point of c1 is equal to the first point of c2 + c2[0], c2[1] = c1[6], c1[7] +} + +// TraceCubic generate lines subdividing the cubic curve using a Liner +// flattening_threshold helps determines the flattening expectation of the curve +func TraceCubic(t Liner, cubic []float64, flatteningThreshold float64) { + // Allocation curves + var curves [CurveRecursionLimit * 8]float64 + copy(curves[0:8], cubic[0:8]) + i := 0 + + // current curve + var c []float64 + + var dx, dy, d2, d3 float64 + + for i >= 0 { + c = curves[i*8:] + dx = c[6] - c[0] + dy = c[7] - c[1] + + d2 = math.Abs((c[2]-c[6])*dy - (c[3]-c[7])*dx) + d3 = math.Abs((c[4]-c[6])*dy - (c[5]-c[7])*dx) + + // if it's flat then trace a line + if (d2+d3)*(d2+d3) < flatteningThreshold*(dx*dx+dy*dy) || i == len(curves)-1 { + t.LineTo(c[6], c[7]) + i-- + } else { + // second half of bezier go lower onto the stack + SubdivideCubic(c, curves[(i+1)*8:], curves[i*8:]) + i++ + } + } +} + +// Quad +// x1, y1, cpx1, cpy2, x2, y2 float64 + +// SubdivideQuad a Bezier quad curve in 2 equivalents Bezier quad curves. +// c1 and c2 parameters are the resulting curves +func SubdivideQuad(c, c1, c2 []float64) { + // First point of c is the first point of c1 + c1[0], c1[1] = c[0], c[1] + // Last point of c is the last point of c2 + c2[4], c2[5] = c[4], c[5] + + // Subdivide segment using midpoints + c1[2] = (c[0] + c[2]) / 2 + c1[3] = (c[1] + c[3]) / 2 + c2[2] = (c[2] + c[4]) / 2 + c2[3] = (c[3] + c[5]) / 2 + c1[4] = (c1[2] + c2[2]) / 2 + c1[5] = (c1[3] + c2[3]) / 2 + c2[0], c2[1] = c1[4], c1[5] + return +} + +func traceWindowIndices(i int) (startAt, endAt int) { + startAt = i * 6 + endAt = startAt + 6 + return +} + +func traceCalcDeltas(c []float64) (dx, dy, d float64) { + dx = c[4] - c[0] + dy = c[5] - c[1] + d = math.Abs(((c[2]-c[4])*dy - (c[3]-c[5])*dx)) + return +} + +func traceIsFlat(dx, dy, d, threshold float64) bool { + return (d * d) < threshold*(dx*dx+dy*dy) +} + +func traceGetWindow(curves []float64, i int) []float64 { + startAt, endAt := traceWindowIndices(i) + return curves[startAt:endAt] +} + +// TraceQuad generate lines subdividing the curve using a Liner +// flattening_threshold helps determines the flattening expectation of the curve +func TraceQuad(t Liner, quad []float64, flatteningThreshold float64) { + const curveLen = CurveRecursionLimit * 6 + const curveEndIndex = curveLen - 1 + const lastIteration = CurveRecursionLimit - 1 + + // Allocates curves stack + curves := make([]float64, curveLen) + + // copy 6 elements from the quad path to the stack + copy(curves[0:6], quad[0:6]) + + var i int + var c []float64 + var dx, dy, d float64 + + for i >= 0 { + c = traceGetWindow(curves, i) + dx, dy, d = traceCalcDeltas(c) + + // bail early if the distance is 0 + if d == 0 { + return + } + + // if it's flat then trace a line + if traceIsFlat(dx, dy, d, flatteningThreshold) || i == lastIteration { + t.LineTo(c[4], c[5]) + i-- + } else { + SubdivideQuad(c, traceGetWindow(curves, i+1), traceGetWindow(curves, i)) + i++ + } + } +} + +// TraceArc trace an arc using a Liner +func TraceArc(t Liner, x, y, rx, ry, start, angle, scale float64) (lastX, lastY float64) { + end := start + angle + clockWise := true + if angle < 0 { + clockWise = false + } + ra := (math.Abs(rx) + math.Abs(ry)) / 2 + da := math.Acos(ra/(ra+0.125/scale)) * 2 + //normalize + if !clockWise { + da = -da + } + angle = start + da + var curX, curY float64 + for { + if (angle < end-da/4) != clockWise { + curX = x + math.Cos(end)*rx + curY = y + math.Sin(end)*ry + return curX, curY + } + curX = x + math.Cos(angle)*rx + curY = y + math.Sin(angle)*ry + + angle += da + t.LineTo(curX, curY) + } +} diff --git a/drawing/curve_test.go b/drawing/curve_test.go new file mode 100644 index 0000000..31abe8e --- /dev/null +++ b/drawing/curve_test.go @@ -0,0 +1,35 @@ +package drawing + +import ( + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +type point struct { + X, Y float64 +} + +type mockLine struct { + inner []point +} + +func (ml *mockLine) LineTo(x, y float64) { + ml.inner = append(ml.inner, point{x, y}) +} + +func (ml mockLine) Len() int { + return len(ml.inner) +} + +func TestTraceQuad(t *testing.T) { + // replaced new assertions helper + + // Quad + // x1, y1, cpx1, cpy2, x2, y2 float64 + // do the 9->12 circle segment + quad := []float64{10, 20, 20, 20, 20, 10} + liner := &mockLine{} + TraceQuad(liner, quad, 0.5) + testutil.AssertNotZero(t, liner.Len()) +} diff --git a/drawing/dasher.go b/drawing/dasher.go new file mode 100644 index 0000000..20a5a6b --- /dev/null +++ b/drawing/dasher.go @@ -0,0 +1,89 @@ +package drawing + +// NewDashVertexConverter creates a new dash converter. +func NewDashVertexConverter(dash []float64, dashOffset float64, flattener Flattener) *DashVertexConverter { + var dasher DashVertexConverter + dasher.dash = dash + dasher.currentDash = 0 + dasher.dashOffset = dashOffset + dasher.next = flattener + return &dasher +} + +// DashVertexConverter is a converter for dash vertexes. +type DashVertexConverter struct { + next Flattener + x, y, distance float64 + dash []float64 + currentDash int + dashOffset float64 +} + +// LineTo implements the pathbuilder interface. +func (dasher *DashVertexConverter) LineTo(x, y float64) { + dasher.lineTo(x, y) +} + +// MoveTo implements the pathbuilder interface. +func (dasher *DashVertexConverter) MoveTo(x, y float64) { + dasher.next.MoveTo(x, y) + dasher.x, dasher.y = x, y + dasher.distance = dasher.dashOffset + dasher.currentDash = 0 +} + +// LineJoin implements the pathbuilder interface. +func (dasher *DashVertexConverter) LineJoin() { + dasher.next.LineJoin() +} + +// Close implements the pathbuilder interface. +func (dasher *DashVertexConverter) Close() { + dasher.next.Close() +} + +// End implements the pathbuilder interface. +func (dasher *DashVertexConverter) End() { + dasher.next.End() +} + +func (dasher *DashVertexConverter) lineTo(x, y float64) { + rest := dasher.dash[dasher.currentDash] - dasher.distance + for rest < 0 { + dasher.distance = dasher.distance - dasher.dash[dasher.currentDash] + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + rest = dasher.dash[dasher.currentDash] - dasher.distance + } + d := distance(dasher.x, dasher.y, x, y) + for d >= rest { + k := rest / d + lx := dasher.x + k*(x-dasher.x) + ly := dasher.y + k*(y-dasher.y) + if dasher.currentDash%2 == 0 { + // line + dasher.next.LineTo(lx, ly) + } else { + // gap + dasher.next.End() + dasher.next.MoveTo(lx, ly) + } + d = d - rest + dasher.x, dasher.y = lx, ly + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + rest = dasher.dash[dasher.currentDash] + } + dasher.distance = d + if dasher.currentDash%2 == 0 { + // line + dasher.next.LineTo(x, y) + } else { + // gap + dasher.next.End() + dasher.next.MoveTo(x, y) + } + if dasher.distance >= dasher.dash[dasher.currentDash] { + dasher.distance = dasher.distance - dasher.dash[dasher.currentDash] + dasher.currentDash = (dasher.currentDash + 1) % len(dasher.dash) + } + dasher.x, dasher.y = x, y +} diff --git a/drawing/demux_flattener.go b/drawing/demux_flattener.go new file mode 100644 index 0000000..43b8646 --- /dev/null +++ b/drawing/demux_flattener.go @@ -0,0 +1,41 @@ +package drawing + +// DemuxFlattener is a flattener +type DemuxFlattener struct { + Flatteners []Flattener +} + +// MoveTo implements the path builder interface. +func (dc DemuxFlattener) MoveTo(x, y float64) { + for _, flattener := range dc.Flatteners { + flattener.MoveTo(x, y) + } +} + +// LineTo implements the path builder interface. +func (dc DemuxFlattener) LineTo(x, y float64) { + for _, flattener := range dc.Flatteners { + flattener.LineTo(x, y) + } +} + +// LineJoin implements the path builder interface. +func (dc DemuxFlattener) LineJoin() { + for _, flattener := range dc.Flatteners { + flattener.LineJoin() + } +} + +// Close implements the path builder interface. +func (dc DemuxFlattener) Close() { + for _, flattener := range dc.Flatteners { + flattener.Close() + } +} + +// End implements the path builder interface. +func (dc DemuxFlattener) End() { + for _, flattener := range dc.Flatteners { + flattener.End() + } +} diff --git a/drawing/drawing.go b/drawing/drawing.go new file mode 100644 index 0000000..8a1da6a --- /dev/null +++ b/drawing/drawing.go @@ -0,0 +1,148 @@ +package drawing + +import ( + "image/color" + + "github.com/golang/freetype/truetype" +) + +// FillRule defines the type for fill rules +type FillRule int + +const ( + // FillRuleEvenOdd determines the "insideness" of a point in the shape + // by drawing a ray from that point to infinity in any direction + // and counting the number of path segments from the given shape that the ray crosses. + // If this number is odd, the point is inside; if even, the point is outside. + FillRuleEvenOdd FillRule = iota + // FillRuleWinding determines the "insideness" of a point in the shape + // by drawing a ray from that point to infinity in any direction + // and then examining the places where a segment of the shape crosses the ray. + // Starting with a count of zero, add one each time a path segment crosses + // the ray from left to right and subtract one each time + // a path segment crosses the ray from right to left. After counting the crossings, + // if the result is zero then the point is outside the path. Otherwise, it is inside. + FillRuleWinding +) + +// LineCap is the style of line extremities +type LineCap int + +const ( + // RoundCap defines a rounded shape at the end of the line + RoundCap LineCap = iota + // ButtCap defines a squared shape exactly at the end of the line + ButtCap + // SquareCap defines a squared shape at the end of the line + SquareCap +) + +// LineJoin is the style of segments joint +type LineJoin int + +const ( + // BevelJoin represents cut segments joint + BevelJoin LineJoin = iota + // RoundJoin represents rounded segments joint + RoundJoin + // MiterJoin represents peaker segments joint + MiterJoin +) + +// StrokeStyle keeps stroke style attributes +// that is used by the Stroke method of a Drawer +type StrokeStyle struct { + // Color defines the color of stroke + Color color.Color + // Line width + Width float64 + // Line cap style rounded, butt or square + LineCap LineCap + // Line join style bevel, round or miter + LineJoin LineJoin + // offset of the first dash + DashOffset float64 + // array represented dash length pair values are plain dash and impair are space between dash + // if empty display plain line + Dash []float64 +} + +// SolidFillStyle define style attributes for a solid fill style +type SolidFillStyle struct { + // Color defines the line color + Color color.Color + // FillRule defines the file rule to used + FillRule FillRule +} + +// Valign Vertical Alignment of the text +type Valign int + +const ( + // ValignTop top align text + ValignTop Valign = iota + // ValignCenter centered text + ValignCenter + // ValignBottom bottom aligned text + ValignBottom + // ValignBaseline align text with the baseline of the font + ValignBaseline +) + +// Halign Horizontal Alignment of the text +type Halign int + +const ( + // HalignLeft Horizontally align to left + HalignLeft = iota + // HalignCenter Horizontally align to center + HalignCenter + // HalignRight Horizontally align to right + HalignRight +) + +// TextStyle describe text property +type TextStyle struct { + // Color defines the color of text + Color color.Color + // Size font size + Size float64 + // The font to use + Font *truetype.Font + // Horizontal Alignment of the text + Halign Halign + // Vertical Alignment of the text + Valign Valign +} + +// ScalingPolicy is a constant to define how to scale an image +type ScalingPolicy int + +const ( + // ScalingNone no scaling applied + ScalingNone ScalingPolicy = iota + // ScalingStretch the image is stretched so that its width and height are exactly the given width and height + ScalingStretch + // ScalingWidth the image is scaled so that its width is exactly the given width + ScalingWidth + // ScalingHeight the image is scaled so that its height is exactly the given height + ScalingHeight + // ScalingFit the image is scaled to the largest scale that allow the image to fit within a rectangle width x height + ScalingFit + // ScalingSameArea the image is scaled so that its area is exactly the area of the given rectangle width x height + ScalingSameArea + // ScalingFill the image is scaled to the smallest scale that allow the image to fully cover a rectangle width x height + ScalingFill +) + +// ImageScaling style attributes used to display the image +type ImageScaling struct { + // Horizontal Alignment of the image + Halign Halign + // Vertical Alignment of the image + Valign Valign + // Width Height used by scaling policy + Width, Height float64 + // ScalingPolicy defines the scaling policy to applied to the image + ScalingPolicy ScalingPolicy +} diff --git a/drawing/flattener.go b/drawing/flattener.go new file mode 100644 index 0000000..7b34201 --- /dev/null +++ b/drawing/flattener.go @@ -0,0 +1,97 @@ +package drawing + +// Liner receive segment definition +type Liner interface { + // LineTo Draw a line from the current position to the point (x, y) + LineTo(x, y float64) +} + +// Flattener receive segment definition +type Flattener interface { + // MoveTo Start a New line from the point (x, y) + MoveTo(x, y float64) + // LineTo Draw a line from the current position to the point (x, y) + LineTo(x, y float64) + // LineJoin add the most recent starting point to close the path to create a polygon + LineJoin() + // Close add the most recent starting point to close the path to create a polygon + Close() + // End mark the current line as finished so we can draw caps + End() +} + +// Flatten convert curves into straight segments keeping join segments info +func Flatten(path *Path, flattener Flattener, scale float64) { + // First Point + var startX, startY float64 + // Current Point + var x, y float64 + var i int + for _, cmp := range path.Components { + switch cmp { + case MoveToComponent: + x, y = path.Points[i], path.Points[i+1] + startX, startY = x, y + if i != 0 { + flattener.End() + } + flattener.MoveTo(x, y) + i += 2 + case LineToComponent: + x, y = path.Points[i], path.Points[i+1] + flattener.LineTo(x, y) + flattener.LineJoin() + i += 2 + case QuadCurveToComponent: + // we include the previous point for the start of the curve + TraceQuad(flattener, path.Points[i-2:], 0.5) + x, y = path.Points[i+2], path.Points[i+3] + flattener.LineTo(x, y) + i += 4 + case CubicCurveToComponent: + TraceCubic(flattener, path.Points[i-2:], 0.5) + x, y = path.Points[i+4], path.Points[i+5] + flattener.LineTo(x, y) + i += 6 + case ArcToComponent: + x, y = TraceArc(flattener, path.Points[i], path.Points[i+1], path.Points[i+2], path.Points[i+3], path.Points[i+4], path.Points[i+5], scale) + flattener.LineTo(x, y) + i += 6 + case CloseComponent: + flattener.LineTo(startX, startY) + flattener.Close() + } + } + flattener.End() +} + +// SegmentedPath is a path of disparate point sectinos. +type SegmentedPath struct { + Points []float64 +} + +// MoveTo implements the path interface. +func (p *SegmentedPath) MoveTo(x, y float64) { + p.Points = append(p.Points, x, y) + // TODO need to mark this point as moveto +} + +// LineTo implements the path interface. +func (p *SegmentedPath) LineTo(x, y float64) { + p.Points = append(p.Points, x, y) +} + +// LineJoin implements the path interface. +func (p *SegmentedPath) LineJoin() { + // TODO need to mark the current point as linejoin +} + +// Close implements the path interface. +func (p *SegmentedPath) Close() { + // TODO Close +} + +// End implements the path interface. +func (p *SegmentedPath) End() { + // Nothing to do +} diff --git a/drawing/free_type_path.go b/drawing/free_type_path.go new file mode 100644 index 0000000..5c3c266 --- /dev/null +++ b/drawing/free_type_path.go @@ -0,0 +1,30 @@ +package drawing + +import ( + "github.com/golang/freetype/raster" + "golang.org/x/image/math/fixed" +) + +// FtLineBuilder is a builder for freetype raster glyphs. +type FtLineBuilder struct { + Adder raster.Adder +} + +// MoveTo implements the path builder interface. +func (liner FtLineBuilder) MoveTo(x, y float64) { + liner.Adder.Start(fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}) +} + +// LineTo implements the path builder interface. +func (liner FtLineBuilder) LineTo(x, y float64) { + liner.Adder.Add1(fixed.Point26_6{X: fixed.Int26_6(x * 64), Y: fixed.Int26_6(y * 64)}) +} + +// LineJoin implements the path builder interface. +func (liner FtLineBuilder) LineJoin() {} + +// Close implements the path builder interface. +func (liner FtLineBuilder) Close() {} + +// End implements the path builder interface. +func (liner FtLineBuilder) End() {} diff --git a/drawing/graphic_context.go b/drawing/graphic_context.go new file mode 100644 index 0000000..553c1eb --- /dev/null +++ b/drawing/graphic_context.go @@ -0,0 +1,82 @@ +package drawing + +import ( + "image" + "image/color" + + "github.com/golang/freetype/truetype" +) + +// GraphicContext describes the interface for the various backends (images, pdf, opengl, ...) +type GraphicContext interface { + // PathBuilder describes the interface for path drawing + PathBuilder + // BeginPath creates a new path + BeginPath() + // GetMatrixTransform returns the current transformation matrix + GetMatrixTransform() Matrix + // SetMatrixTransform sets the current transformation matrix + SetMatrixTransform(tr Matrix) + // ComposeMatrixTransform composes the current transformation matrix with tr + ComposeMatrixTransform(tr Matrix) + // Rotate applies a rotation to the current transformation matrix. angle is in radian. + Rotate(angle float64) + // Translate applies a translation to the current transformation matrix. + Translate(tx, ty float64) + // Scale applies a scale to the current transformation matrix. + Scale(sx, sy float64) + // SetStrokeColor sets the current stroke color + SetStrokeColor(c color.Color) + // SetFillColor sets the current fill color + SetFillColor(c color.Color) + // SetFillRule sets the current fill rule + SetFillRule(f FillRule) + // SetLineWidth sets the current line width + SetLineWidth(lineWidth float64) + // SetLineCap sets the current line cap + SetLineCap(cap LineCap) + // SetLineJoin sets the current line join + SetLineJoin(join LineJoin) + // SetLineDash sets the current dash + SetLineDash(dash []float64, dashOffset float64) + // SetFontSize sets the current font size + SetFontSize(fontSize float64) + // GetFontSize gets the current font size + GetFontSize() float64 + // SetFont sets the font for the context + SetFont(f *truetype.Font) + // GetFont returns the current font + GetFont() *truetype.Font + // DrawImage draws the raster image in the current canvas + DrawImage(image image.Image) + // Save the context and push it to the context stack + Save() + // Restore remove the current context and restore the last one + Restore() + // Clear fills the current canvas with a default transparent color + Clear() + // ClearRect fills the specified rectangle with a default transparent color + ClearRect(x1, y1, x2, y2 int) + // SetDPI sets the current DPI + SetDPI(dpi int) + // GetDPI gets the current DPI + GetDPI() int + // GetStringBounds gets pixel bounds(dimensions) of given string + GetStringBounds(s string) (left, top, right, bottom float64) + // CreateStringPath creates a path from the string s at x, y + CreateStringPath(text string, x, y float64) (cursor float64) + // FillString draws the text at point (0, 0) + FillString(text string) (cursor float64) + // FillStringAt draws the text at the specified point (x, y) + FillStringAt(text string, x, y float64) (cursor float64) + // StrokeString draws the contour of the text at point (0, 0) + StrokeString(text string) (cursor float64) + // StrokeStringAt draws the contour of the text at point (x, y) + StrokeStringAt(text string, x, y float64) (cursor float64) + // Stroke strokes the paths with the color specified by SetStrokeColor + Stroke(paths ...*Path) + // Fill fills the paths with the color specified by SetFillColor + Fill(paths ...*Path) + // FillStroke first fills the paths and than strokes them + FillStroke(paths ...*Path) +} diff --git a/drawing/image_filter.go b/drawing/image_filter.go new file mode 100644 index 0000000..3cf0309 --- /dev/null +++ b/drawing/image_filter.go @@ -0,0 +1,13 @@ +package drawing + +// ImageFilter defines the type of filter to use +type ImageFilter int + +const ( + // LinearFilter defines a linear filter + LinearFilter ImageFilter = iota + // BilinearFilter defines a bilinear filter + BilinearFilter + // BicubicFilter defines a bicubic filter + BicubicFilter +) diff --git a/drawing/line.go b/drawing/line.go new file mode 100644 index 0000000..b4e28e7 --- /dev/null +++ b/drawing/line.go @@ -0,0 +1,48 @@ +package drawing + +import ( + "image/color" + "image/draw" +) + +// PolylineBresenham draws a polyline to an image +func PolylineBresenham(img draw.Image, c color.Color, s ...float64) { + for i := 2; i < len(s); i += 2 { + Bresenham(img, c, int(s[i-2]+0.5), int(s[i-1]+0.5), int(s[i]+0.5), int(s[i+1]+0.5)) + } +} + +// Bresenham draws a line between (x0, y0) and (x1, y1) +func Bresenham(img draw.Image, color color.Color, x0, y0, x1, y1 int) { + dx := abs(x1 - x0) + dy := abs(y1 - y0) + var sx, sy int + if x0 < x1 { + sx = 1 + } else { + sx = -1 + } + if y0 < y1 { + sy = 1 + } else { + sy = -1 + } + err := dx - dy + + var e2 int + for { + img.Set(x0, y0, color) + if x0 == x1 && y0 == y1 { + return + } + e2 = 2 * err + if e2 > -dy { + err = err - dy + x0 = x0 + sx + } + if e2 < dx { + err = err + dx + y0 = y0 + sy + } + } +} diff --git a/drawing/matrix.go b/drawing/matrix.go new file mode 100644 index 0000000..8bd2049 --- /dev/null +++ b/drawing/matrix.go @@ -0,0 +1,220 @@ +package drawing + +import ( + "math" +) + +// Matrix represents an affine transformation +type Matrix [6]float64 + +const ( + epsilon = 1e-6 +) + +// Determinant compute the determinant of the matrix +func (tr Matrix) Determinant() float64 { + return tr[0]*tr[3] - tr[1]*tr[2] +} + +// Transform applies the transformation matrix to points. It modify the points passed in parameter. +func (tr Matrix) Transform(points []float64) { + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = x*tr[0] + y*tr[2] + tr[4] + points[j] = x*tr[1] + y*tr[3] + tr[5] + } +} + +// TransformPoint applies the transformation matrix to point. It returns the point the transformed point. +func (tr Matrix) TransformPoint(x, y float64) (xres, yres float64) { + xres = x*tr[0] + y*tr[2] + tr[4] + yres = x*tr[1] + y*tr[3] + tr[5] + return xres, yres +} + +func minMax(x, y float64) (min, max float64) { + if x > y { + return y, x + } + return x, y +} + +// TransformRectangle applies the transformation matrix to the rectangle represented by the min and the max point of the rectangle +func (tr Matrix) TransformRectangle(x0, y0, x2, y2 float64) (nx0, ny0, nx2, ny2 float64) { + points := []float64{x0, y0, x2, y0, x2, y2, x0, y2} + tr.Transform(points) + points[0], points[2] = minMax(points[0], points[2]) + points[4], points[6] = minMax(points[4], points[6]) + points[1], points[3] = minMax(points[1], points[3]) + points[5], points[7] = minMax(points[5], points[7]) + + nx0 = math.Min(points[0], points[4]) + ny0 = math.Min(points[1], points[5]) + nx2 = math.Max(points[2], points[6]) + ny2 = math.Max(points[3], points[7]) + return nx0, ny0, nx2, ny2 +} + +// InverseTransform applies the transformation inverse matrix to the rectangle represented by the min and the max point of the rectangle +func (tr Matrix) InverseTransform(points []float64) { + d := tr.Determinant() // matrix determinant + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = ((x-tr[4])*tr[3] - (y-tr[5])*tr[2]) / d + points[j] = ((y-tr[5])*tr[0] - (x-tr[4])*tr[1]) / d + } +} + +// InverseTransformPoint applies the transformation inverse matrix to point. It returns the point the transformed point. +func (tr Matrix) InverseTransformPoint(x, y float64) (xres, yres float64) { + d := tr.Determinant() // matrix determinant + xres = ((x-tr[4])*tr[3] - (y-tr[5])*tr[2]) / d + yres = ((y-tr[5])*tr[0] - (x-tr[4])*tr[1]) / d + return xres, yres +} + +// VectorTransform applies the transformation matrix to points without using the translation parameter of the affine matrix. +// It modify the points passed in parameter. +func (tr Matrix) VectorTransform(points []float64) { + for i, j := 0, 1; j < len(points); i, j = i+2, j+2 { + x := points[i] + y := points[j] + points[i] = x*tr[0] + y*tr[2] + points[j] = x*tr[1] + y*tr[3] + } +} + +// NewIdentityMatrix creates an identity transformation matrix. +func NewIdentityMatrix() Matrix { + return Matrix{1, 0, 0, 1, 0, 0} +} + +// NewTranslationMatrix creates a transformation matrix with a translation tx and ty translation parameter +func NewTranslationMatrix(tx, ty float64) Matrix { + return Matrix{1, 0, 0, 1, tx, ty} +} + +// NewScaleMatrix creates a transformation matrix with a sx, sy scale factor +func NewScaleMatrix(sx, sy float64) Matrix { + return Matrix{sx, 0, 0, sy, 0, 0} +} + +// NewRotationMatrix creates a rotation transformation matrix. angle is in radian +func NewRotationMatrix(angle float64) Matrix { + c := math.Cos(angle) + s := math.Sin(angle) + return Matrix{c, s, -s, c, 0, 0} +} + +// NewMatrixFromRects creates a transformation matrix, combining a scale and a translation, that transform rectangle1 into rectangle2. +func NewMatrixFromRects(rectangle1, rectangle2 [4]float64) Matrix { + xScale := (rectangle2[2] - rectangle2[0]) / (rectangle1[2] - rectangle1[0]) + yScale := (rectangle2[3] - rectangle2[1]) / (rectangle1[3] - rectangle1[1]) + xOffset := rectangle2[0] - (rectangle1[0] * xScale) + yOffset := rectangle2[1] - (rectangle1[1] * yScale) + return Matrix{xScale, 0, 0, yScale, xOffset, yOffset} +} + +// Inverse computes the inverse matrix +func (tr *Matrix) Inverse() { + d := tr.Determinant() // matrix determinant + tr0, tr1, tr2, tr3, tr4, tr5 := tr[0], tr[1], tr[2], tr[3], tr[4], tr[5] + tr[0] = tr3 / d + tr[1] = -tr1 / d + tr[2] = -tr2 / d + tr[3] = tr0 / d + tr[4] = (tr2*tr5 - tr3*tr4) / d + tr[5] = (tr1*tr4 - tr0*tr5) / d +} + +// Copy copies the matrix. +func (tr Matrix) Copy() Matrix { + var result Matrix + copy(result[:], tr[:]) + return result +} + +// Compose multiplies trToConcat x tr +func (tr *Matrix) Compose(trToCompose Matrix) { + tr0, tr1, tr2, tr3, tr4, tr5 := tr[0], tr[1], tr[2], tr[3], tr[4], tr[5] + tr[0] = trToCompose[0]*tr0 + trToCompose[1]*tr2 + tr[1] = trToCompose[1]*tr3 + trToCompose[0]*tr1 + tr[2] = trToCompose[2]*tr0 + trToCompose[3]*tr2 + tr[3] = trToCompose[3]*tr3 + trToCompose[2]*tr1 + tr[4] = trToCompose[4]*tr0 + trToCompose[5]*tr2 + tr4 + tr[5] = trToCompose[5]*tr3 + trToCompose[4]*tr1 + tr5 +} + +// Scale adds a scale to the matrix +func (tr *Matrix) Scale(sx, sy float64) { + tr[0] = sx * tr[0] + tr[1] = sx * tr[1] + tr[2] = sy * tr[2] + tr[3] = sy * tr[3] +} + +// Translate adds a translation to the matrix +func (tr *Matrix) Translate(tx, ty float64) { + tr[4] = tx*tr[0] + ty*tr[2] + tr[4] + tr[5] = ty*tr[3] + tx*tr[1] + tr[5] +} + +// Rotate adds a rotation to the matrix. +func (tr *Matrix) Rotate(radians float64) { + c := math.Cos(radians) + s := math.Sin(radians) + t0 := c*tr[0] + s*tr[2] + t1 := s*tr[3] + c*tr[1] + t2 := c*tr[2] - s*tr[0] + t3 := c*tr[3] - s*tr[1] + tr[0] = t0 + tr[1] = t1 + tr[2] = t2 + tr[3] = t3 +} + +// GetTranslation gets the matrix traslation. +func (tr Matrix) GetTranslation() (x, y float64) { + return tr[4], tr[5] +} + +// GetScaling gets the matrix scaling. +func (tr Matrix) GetScaling() (x, y float64) { + return tr[0], tr[3] +} + +// GetScale computes a scale for the matrix +func (tr Matrix) GetScale() float64 { + x := 0.707106781*tr[0] + 0.707106781*tr[1] + y := 0.707106781*tr[2] + 0.707106781*tr[3] + return math.Sqrt(x*x + y*y) +} + +// ******************** Testing ******************** + +// Equals tests if a two transformation are equal. A tolerance is applied when comparing matrix elements. +func (tr Matrix) Equals(tr2 Matrix) bool { + for i := 0; i < 6; i = i + 1 { + if !fequals(tr[i], tr2[i]) { + return false + } + } + return true +} + +// IsIdentity tests if a transformation is the identity transformation. A tolerance is applied when comparing matrix elements. +func (tr Matrix) IsIdentity() bool { + return fequals(tr[4], 0) && fequals(tr[5], 0) && tr.IsTranslation() +} + +// IsTranslation tests if a transformation is is a pure translation. A tolerance is applied when comparing matrix elements. +func (tr Matrix) IsTranslation() bool { + return fequals(tr[0], 1) && fequals(tr[1], 0) && fequals(tr[2], 0) && fequals(tr[3], 1) +} + +// fequals compares two floats. return true if the distance between the two floats is less than epsilon, false otherwise +func fequals(float1, float2 float64) bool { + return math.Abs(float1-float2) <= epsilon +} diff --git a/drawing/painter.go b/drawing/painter.go new file mode 100644 index 0000000..1353449 --- /dev/null +++ b/drawing/painter.go @@ -0,0 +1,31 @@ +package drawing + +import ( + "image" + "image/color" + + "golang.org/x/image/draw" + "golang.org/x/image/math/f64" + + "github.com/golang/freetype/raster" +) + +// Painter implements the freetype raster.Painter and has a SetColor method like the RGBAPainter +type Painter interface { + raster.Painter + SetColor(color color.Color) +} + +// DrawImage draws an image into dest using an affine transformation matrix, an op and a filter +func DrawImage(src image.Image, dest draw.Image, tr Matrix, op draw.Op, filter ImageFilter) { + var transformer draw.Transformer + switch filter { + case LinearFilter: + transformer = draw.NearestNeighbor + case BilinearFilter: + transformer = draw.BiLinear + case BicubicFilter: + transformer = draw.CatmullRom + } + transformer.Transform(dest, f64.Aff3{tr[0], tr[1], tr[4], tr[2], tr[3], tr[5]}, src, src.Bounds(), op, nil) +} diff --git a/drawing/path.go b/drawing/path.go new file mode 100644 index 0000000..20f2d2e --- /dev/null +++ b/drawing/path.go @@ -0,0 +1,186 @@ +package drawing + +import ( + "fmt" + "math" +) + +// PathBuilder describes the interface for path drawing. +type PathBuilder interface { + // LastPoint returns the current point of the current sub path + LastPoint() (x, y float64) + // MoveTo creates a new subpath that start at the specified point + MoveTo(x, y float64) + // LineTo adds a line to the current subpath + LineTo(x, y float64) + // QuadCurveTo adds a quadratic Bézier curve to the current subpath + QuadCurveTo(cx, cy, x, y float64) + // CubicCurveTo adds a cubic Bézier curve to the current subpath + CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) + // ArcTo adds an arc to the current subpath + ArcTo(cx, cy, rx, ry, startAngle, angle float64) + // Close creates a line from the current point to the last MoveTo + // point (if not the same) and mark the path as closed so the + // first and last lines join nicely. + Close() +} + +// PathComponent represents component of a path +type PathComponent int + +const ( + // MoveToComponent is a MoveTo component in a Path + MoveToComponent PathComponent = iota + // LineToComponent is a LineTo component in a Path + LineToComponent + // QuadCurveToComponent is a QuadCurveTo component in a Path + QuadCurveToComponent + // CubicCurveToComponent is a CubicCurveTo component in a Path + CubicCurveToComponent + // ArcToComponent is a ArcTo component in a Path + ArcToComponent + // CloseComponent is a ArcTo component in a Path + CloseComponent +) + +// Path stores points +type Path struct { + // Components is a slice of PathComponent in a Path and mark the role of each points in the Path + Components []PathComponent + // Points are combined with Components to have a specific role in the path + Points []float64 + // Last Point of the Path + x, y float64 +} + +func (p *Path) appendToPath(cmd PathComponent, points ...float64) { + p.Components = append(p.Components, cmd) + p.Points = append(p.Points, points...) +} + +// LastPoint returns the current point of the current path +func (p *Path) LastPoint() (x, y float64) { + return p.x, p.y +} + +// MoveTo starts a new path at (x, y) position +func (p *Path) MoveTo(x, y float64) { + p.appendToPath(MoveToComponent, x, y) + p.x = x + p.y = y +} + +// LineTo adds a line to the current path +func (p *Path) LineTo(x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(LineToComponent, x, y) + p.x = x + p.y = y +} + +// QuadCurveTo adds a quadratic bezier curve to the current path +func (p *Path) QuadCurveTo(cx, cy, x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(QuadCurveToComponent, cx, cy, x, y) + p.x = x + p.y = y +} + +// CubicCurveTo adds a cubic bezier curve to the current path +func (p *Path) CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) { + if len(p.Components) == 0 { //special case when no move has been done + p.MoveTo(0, 0) + } + p.appendToPath(CubicCurveToComponent, cx1, cy1, cx2, cy2, x, y) + p.x = x + p.y = y +} + +// ArcTo adds an arc to the path +func (p *Path) ArcTo(cx, cy, rx, ry, startAngle, delta float64) { + endAngle := startAngle + delta + clockWise := true + if delta < 0 { + clockWise = false + } + // normalize + if clockWise { + for endAngle < startAngle { + endAngle += math.Pi * 2.0 + } + } else { + for startAngle < endAngle { + startAngle += math.Pi * 2.0 + } + } + startX := cx + math.Cos(startAngle)*rx + startY := cy + math.Sin(startAngle)*ry + if len(p.Components) > 0 { + p.LineTo(startX, startY) + } else { + p.MoveTo(startX, startY) + } + p.appendToPath(ArcToComponent, cx, cy, rx, ry, startAngle, delta) + p.x = cx + math.Cos(endAngle)*rx + p.y = cy + math.Sin(endAngle)*ry +} + +// Close closes the current path +func (p *Path) Close() { + p.appendToPath(CloseComponent) +} + +// Copy make a clone of the current path and return it +func (p *Path) Copy() (dest *Path) { + dest = new(Path) + dest.Components = make([]PathComponent, len(p.Components)) + copy(dest.Components, p.Components) + dest.Points = make([]float64, len(p.Points)) + copy(dest.Points, p.Points) + dest.x, dest.y = p.x, p.y + return dest +} + +// Clear reset the path +func (p *Path) Clear() { + p.Components = p.Components[0:0] + p.Points = p.Points[0:0] + return +} + +// IsEmpty returns true if the path is empty +func (p *Path) IsEmpty() bool { + return len(p.Components) == 0 +} + +// String returns a debug text view of the path +func (p *Path) String() string { + s := "" + j := 0 + for _, cmd := range p.Components { + switch cmd { + case MoveToComponent: + s += fmt.Sprintf("MoveTo: %f, %f\n", p.Points[j], p.Points[j+1]) + j = j + 2 + case LineToComponent: + s += fmt.Sprintf("LineTo: %f, %f\n", p.Points[j], p.Points[j+1]) + j = j + 2 + case QuadCurveToComponent: + s += fmt.Sprintf("QuadCurveTo: %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3]) + j = j + 4 + case CubicCurveToComponent: + s += fmt.Sprintf("CubicCurveTo: %f, %f, %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3], p.Points[j+4], p.Points[j+5]) + j = j + 6 + case ArcToComponent: + s += fmt.Sprintf("ArcTo: %f, %f, %f, %f, %f, %f\n", p.Points[j], p.Points[j+1], p.Points[j+2], p.Points[j+3], p.Points[j+4], p.Points[j+5]) + j = j + 6 + case CloseComponent: + s += "Close\n" + } + } + return s +} diff --git a/drawing/raster_graphic_context.go b/drawing/raster_graphic_context.go new file mode 100644 index 0000000..1ca0c30 --- /dev/null +++ b/drawing/raster_graphic_context.go @@ -0,0 +1,283 @@ +package drawing + +import ( + "errors" + "image" + "image/color" + "math" + + "github.com/golang/freetype/raster" + "github.com/golang/freetype/truetype" + "golang.org/x/image/draw" + "golang.org/x/image/font" + "golang.org/x/image/math/fixed" +) + +// NewRasterGraphicContext creates a new Graphic context from an image. +func NewRasterGraphicContext(img draw.Image) (*RasterGraphicContext, error) { + var painter Painter + switch selectImage := img.(type) { + case *image.RGBA: + painter = raster.NewRGBAPainter(selectImage) + default: + return nil, errors.New("NewRasterGraphicContext() :: invalid image type") + } + return NewRasterGraphicContextWithPainter(img, painter), nil +} + +// NewRasterGraphicContextWithPainter creates a new Graphic context from an image and a Painter (see Freetype-go) +func NewRasterGraphicContextWithPainter(img draw.Image, painter Painter) *RasterGraphicContext { + width, height := img.Bounds().Dx(), img.Bounds().Dy() + return &RasterGraphicContext{ + NewStackGraphicContext(), + img, + painter, + raster.NewRasterizer(width, height), + raster.NewRasterizer(width, height), + &truetype.GlyphBuf{}, + DefaultDPI, + } +} + +// RasterGraphicContext is the implementation of GraphicContext for a raster image +type RasterGraphicContext struct { + *StackGraphicContext + img draw.Image + painter Painter + fillRasterizer *raster.Rasterizer + strokeRasterizer *raster.Rasterizer + glyphBuf *truetype.GlyphBuf + DPI float64 +} + +// SetDPI sets the screen resolution in dots per inch. +func (rgc *RasterGraphicContext) SetDPI(dpi float64) { + rgc.DPI = dpi + rgc.recalc() +} + +// GetDPI returns the resolution of the Image GraphicContext +func (rgc *RasterGraphicContext) GetDPI() float64 { + return rgc.DPI +} + +// Clear fills the current canvas with a default transparent color +func (rgc *RasterGraphicContext) Clear() { + width, height := rgc.img.Bounds().Dx(), rgc.img.Bounds().Dy() + rgc.ClearRect(0, 0, width, height) +} + +// ClearRect fills the current canvas with a default transparent color at the specified rectangle +func (rgc *RasterGraphicContext) ClearRect(x1, y1, x2, y2 int) { + imageColor := image.NewUniform(rgc.current.FillColor) + draw.Draw(rgc.img, image.Rect(x1, y1, x2, y2), imageColor, image.ZP, draw.Over) +} + +// DrawImage draws the raster image in the current canvas +func (rgc *RasterGraphicContext) DrawImage(img image.Image) { + DrawImage(img, rgc.img, rgc.current.Tr, draw.Over, BilinearFilter) +} + +// FillString draws the text at point (0, 0) +func (rgc *RasterGraphicContext) FillString(text string) (cursor float64, err error) { + cursor, err = rgc.FillStringAt(text, 0, 0) + return +} + +// FillStringAt draws the text at the specified point (x, y) +func (rgc *RasterGraphicContext) FillStringAt(text string, x, y float64) (cursor float64, err error) { + cursor, err = rgc.CreateStringPath(text, x, y) + rgc.Fill() + return +} + +// StrokeString draws the contour of the text at point (0, 0) +func (rgc *RasterGraphicContext) StrokeString(text string) (cursor float64, err error) { + cursor, err = rgc.StrokeStringAt(text, 0, 0) + return +} + +// StrokeStringAt draws the contour of the text at point (x, y) +func (rgc *RasterGraphicContext) StrokeStringAt(text string, x, y float64) (cursor float64, err error) { + cursor, err = rgc.CreateStringPath(text, x, y) + rgc.Stroke() + return +} + +func (rgc *RasterGraphicContext) drawGlyph(glyph truetype.Index, dx, dy float64) error { + if err := rgc.glyphBuf.Load(rgc.current.Font, fixed.Int26_6(rgc.current.Scale), glyph, font.HintingNone); err != nil { + return err + } + e0 := 0 + for _, e1 := range rgc.glyphBuf.Ends { + DrawContour(rgc, rgc.glyphBuf.Points[e0:e1], dx, dy) + e0 = e1 + } + return nil +} + +// CreateStringPath creates a path from the string s at x, y, and returns the string width. +// The text is placed so that the left edge of the em square of the first character of s +// and the baseline intersect at x, y. The majority of the affected pixels will be +// above and to the right of the point, but some may be below or to the left. +// For example, drawing a string that starts with a 'J' in an italic font may +// affect pixels below and left of the point. +func (rgc *RasterGraphicContext) CreateStringPath(s string, x, y float64) (cursor float64, err error) { + f := rgc.GetFont() + if f == nil { + err = errors.New("No font loaded, cannot continue") + return + } + rgc.recalc() + + startx := x + prev, hasPrev := truetype.Index(0), false + for _, rc := range s { + index := f.Index(rc) + if hasPrev { + x += fUnitsToFloat64(f.Kern(fixed.Int26_6(rgc.current.Scale), prev, index)) + } + err = rgc.drawGlyph(index, x, y) + if err != nil { + cursor = x - startx + return + } + x += fUnitsToFloat64(f.HMetric(fixed.Int26_6(rgc.current.Scale), index).AdvanceWidth) + prev, hasPrev = index, true + } + cursor = x - startx + return +} + +// GetStringBounds returns the approximate pixel bounds of a string. +func (rgc *RasterGraphicContext) GetStringBounds(s string) (left, top, right, bottom float64, err error) { + f := rgc.GetFont() + if f == nil { + err = errors.New("No font loaded, cannot continue") + return + } + rgc.recalc() + + left = math.MaxFloat64 + top = math.MaxFloat64 + + cursor := 0.0 + prev, hasPrev := truetype.Index(0), false + for _, rc := range s { + index := f.Index(rc) + if hasPrev { + cursor += fUnitsToFloat64(f.Kern(fixed.Int26_6(rgc.current.Scale), prev, index)) + } + + if err = rgc.glyphBuf.Load(rgc.current.Font, fixed.Int26_6(rgc.current.Scale), index, font.HintingNone); err != nil { + return + } + e0 := 0 + for _, e1 := range rgc.glyphBuf.Ends { + ps := rgc.glyphBuf.Points[e0:e1] + for _, p := range ps { + x, y := pointToF64Point(p) + top = math.Min(top, y) + bottom = math.Max(bottom, y) + left = math.Min(left, x+cursor) + right = math.Max(right, x+cursor) + } + e0 = e1 + } + cursor += fUnitsToFloat64(f.HMetric(fixed.Int26_6(rgc.current.Scale), index).AdvanceWidth) + prev, hasPrev = index, true + } + return +} + +// recalc recalculates scale and bounds values from the font size, screen +// resolution and font metrics, and invalidates the glyph cache. +func (rgc *RasterGraphicContext) recalc() { + rgc.current.Scale = rgc.current.FontSizePoints * float64(rgc.DPI) +} + +// SetFont sets the font used to draw text. +func (rgc *RasterGraphicContext) SetFont(font *truetype.Font) { + rgc.current.Font = font +} + +// GetFont returns the font used to draw text. +func (rgc *RasterGraphicContext) GetFont() *truetype.Font { + return rgc.current.Font +} + +// SetFontSize sets the font size in points (as in ``a 12 point font''). +func (rgc *RasterGraphicContext) SetFontSize(fontSizePoints float64) { + rgc.current.FontSizePoints = fontSizePoints + rgc.recalc() +} + +func (rgc *RasterGraphicContext) paint(rasterizer *raster.Rasterizer, color color.Color) { + rgc.painter.SetColor(color) + rasterizer.Rasterize(rgc.painter) + rasterizer.Clear() + rgc.current.Path.Clear() +} + +// Stroke strokes the paths with the color specified by SetStrokeColor +func (rgc *RasterGraphicContext) Stroke(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.strokeRasterizer.UseNonZeroWinding = true + + stroker := NewLineStroker(rgc.current.Cap, rgc.current.Join, Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.strokeRasterizer}}) + stroker.HalfLineWidth = rgc.current.LineWidth / 2 + + var liner Flattener + if rgc.current.Dash != nil && len(rgc.current.Dash) > 0 { + liner = NewDashVertexConverter(rgc.current.Dash, rgc.current.DashOffset, stroker) + } else { + liner = stroker + } + for _, p := range paths { + Flatten(p, liner, rgc.current.Tr.GetScale()) + } + + rgc.paint(rgc.strokeRasterizer, rgc.current.StrokeColor) +} + +// Fill fills the paths with the color specified by SetFillColor +func (rgc *RasterGraphicContext) Fill(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.fillRasterizer.UseNonZeroWinding = rgc.current.FillRule == FillRuleWinding + + flattener := Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.fillRasterizer}} + for _, p := range paths { + Flatten(p, flattener, rgc.current.Tr.GetScale()) + } + + rgc.paint(rgc.fillRasterizer, rgc.current.FillColor) +} + +// FillStroke first fills the paths and than strokes them +func (rgc *RasterGraphicContext) FillStroke(paths ...*Path) { + paths = append(paths, rgc.current.Path) + rgc.fillRasterizer.UseNonZeroWinding = rgc.current.FillRule == FillRuleWinding + rgc.strokeRasterizer.UseNonZeroWinding = true + + flattener := Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.fillRasterizer}} + + stroker := NewLineStroker(rgc.current.Cap, rgc.current.Join, Transformer{Tr: rgc.current.Tr, Flattener: FtLineBuilder{Adder: rgc.strokeRasterizer}}) + stroker.HalfLineWidth = rgc.current.LineWidth / 2 + + var liner Flattener + if rgc.current.Dash != nil && len(rgc.current.Dash) > 0 { + liner = NewDashVertexConverter(rgc.current.Dash, rgc.current.DashOffset, stroker) + } else { + liner = stroker + } + + demux := DemuxFlattener{Flatteners: []Flattener{flattener, liner}} + for _, p := range paths { + Flatten(p, demux, rgc.current.Tr.GetScale()) + } + + // Fill + rgc.paint(rgc.fillRasterizer, rgc.current.FillColor) + // Stroke + rgc.paint(rgc.strokeRasterizer, rgc.current.StrokeColor) +} diff --git a/drawing/stack_graphic_context.go b/drawing/stack_graphic_context.go new file mode 100644 index 0000000..c3243c9 --- /dev/null +++ b/drawing/stack_graphic_context.go @@ -0,0 +1,211 @@ +package drawing + +import ( + "image" + "image/color" + + "github.com/golang/freetype/truetype" +) + +// StackGraphicContext is a context that does thngs. +type StackGraphicContext struct { + current *ContextStack +} + +// ContextStack is a graphic context implementation. +type ContextStack struct { + Tr Matrix + Path *Path + LineWidth float64 + Dash []float64 + DashOffset float64 + StrokeColor color.Color + FillColor color.Color + FillRule FillRule + Cap LineCap + Join LineJoin + + FontSizePoints float64 + Font *truetype.Font + + Scale float64 + + Previous *ContextStack +} + +// NewStackGraphicContext Create a new Graphic context from an image +func NewStackGraphicContext() *StackGraphicContext { + gc := &StackGraphicContext{} + gc.current = new(ContextStack) + gc.current.Tr = NewIdentityMatrix() + gc.current.Path = new(Path) + gc.current.LineWidth = 1.0 + gc.current.StrokeColor = image.Black + gc.current.FillColor = image.White + gc.current.Cap = RoundCap + gc.current.FillRule = FillRuleEvenOdd + gc.current.Join = RoundJoin + gc.current.FontSizePoints = 10 + return gc +} + +// GetMatrixTransform returns the matrix transform. +func (gc *StackGraphicContext) GetMatrixTransform() Matrix { + return gc.current.Tr +} + +// SetMatrixTransform sets the matrix transform. +func (gc *StackGraphicContext) SetMatrixTransform(tr Matrix) { + gc.current.Tr = tr +} + +// ComposeMatrixTransform composes a transform into the current transform. +func (gc *StackGraphicContext) ComposeMatrixTransform(tr Matrix) { + gc.current.Tr.Compose(tr) +} + +// Rotate rotates the matrix transform by an angle in degrees. +func (gc *StackGraphicContext) Rotate(angle float64) { + gc.current.Tr.Rotate(angle) +} + +// Translate translates a transform. +func (gc *StackGraphicContext) Translate(tx, ty float64) { + gc.current.Tr.Translate(tx, ty) +} + +// Scale scales a transform. +func (gc *StackGraphicContext) Scale(sx, sy float64) { + gc.current.Tr.Scale(sx, sy) +} + +// SetStrokeColor sets the stroke color. +func (gc *StackGraphicContext) SetStrokeColor(c color.Color) { + gc.current.StrokeColor = c +} + +// SetFillColor sets the fill color. +func (gc *StackGraphicContext) SetFillColor(c color.Color) { + gc.current.FillColor = c +} + +// SetFillRule sets the fill rule. +func (gc *StackGraphicContext) SetFillRule(f FillRule) { + gc.current.FillRule = f +} + +// SetLineWidth sets the line width. +func (gc *StackGraphicContext) SetLineWidth(lineWidth float64) { + gc.current.LineWidth = lineWidth +} + +// SetLineCap sets the line cap. +func (gc *StackGraphicContext) SetLineCap(cap LineCap) { + gc.current.Cap = cap +} + +// SetLineJoin sets the line join. +func (gc *StackGraphicContext) SetLineJoin(join LineJoin) { + gc.current.Join = join +} + +// SetLineDash sets the line dash. +func (gc *StackGraphicContext) SetLineDash(dash []float64, dashOffset float64) { + gc.current.Dash = dash + gc.current.DashOffset = dashOffset +} + +// SetFontSize sets the font size. +func (gc *StackGraphicContext) SetFontSize(fontSizePoints float64) { + gc.current.FontSizePoints = fontSizePoints +} + +// GetFontSize gets the font size. +func (gc *StackGraphicContext) GetFontSize() float64 { + return gc.current.FontSizePoints +} + +// SetFont sets the current font. +func (gc *StackGraphicContext) SetFont(f *truetype.Font) { + gc.current.Font = f +} + +// GetFont returns the font. +func (gc *StackGraphicContext) GetFont() *truetype.Font { + return gc.current.Font +} + +// BeginPath starts a new path. +func (gc *StackGraphicContext) BeginPath() { + gc.current.Path.Clear() +} + +// IsEmpty returns if the path is empty. +func (gc *StackGraphicContext) IsEmpty() bool { + return gc.current.Path.IsEmpty() +} + +// LastPoint returns the last point on the path. +func (gc *StackGraphicContext) LastPoint() (x float64, y float64) { + return gc.current.Path.LastPoint() +} + +// MoveTo moves the cursor for a path. +func (gc *StackGraphicContext) MoveTo(x, y float64) { + gc.current.Path.MoveTo(x, y) +} + +// LineTo draws a line. +func (gc *StackGraphicContext) LineTo(x, y float64) { + gc.current.Path.LineTo(x, y) +} + +// QuadCurveTo draws a quad curve. +func (gc *StackGraphicContext) QuadCurveTo(cx, cy, x, y float64) { + gc.current.Path.QuadCurveTo(cx, cy, x, y) +} + +// CubicCurveTo draws a cubic curve. +func (gc *StackGraphicContext) CubicCurveTo(cx1, cy1, cx2, cy2, x, y float64) { + gc.current.Path.CubicCurveTo(cx1, cy1, cx2, cy2, x, y) +} + +// ArcTo draws an arc. +func (gc *StackGraphicContext) ArcTo(cx, cy, rx, ry, startAngle, delta float64) { + gc.current.Path.ArcTo(cx, cy, rx, ry, startAngle, delta) +} + +// Close closes a path. +func (gc *StackGraphicContext) Close() { + gc.current.Path.Close() +} + +// Save pushes a context onto the stack. +func (gc *StackGraphicContext) Save() { + context := new(ContextStack) + context.FontSizePoints = gc.current.FontSizePoints + context.Font = gc.current.Font + context.LineWidth = gc.current.LineWidth + context.StrokeColor = gc.current.StrokeColor + context.FillColor = gc.current.FillColor + context.FillRule = gc.current.FillRule + context.Dash = gc.current.Dash + context.DashOffset = gc.current.DashOffset + context.Cap = gc.current.Cap + context.Join = gc.current.Join + context.Path = gc.current.Path.Copy() + context.Font = gc.current.Font + context.Scale = gc.current.Scale + copy(context.Tr[:], gc.current.Tr[:]) + context.Previous = gc.current + gc.current = context +} + +// Restore restores the previous context. +func (gc *StackGraphicContext) Restore() { + if gc.current.Previous != nil { + oldContext := gc.current + gc.current = gc.current.Previous + oldContext.Previous = nil + } +} diff --git a/drawing/stroker.go b/drawing/stroker.go new file mode 100644 index 0000000..e3ae070 --- /dev/null +++ b/drawing/stroker.go @@ -0,0 +1,85 @@ +// Copyright 2010 The draw2d Authors. All rights reserved. +// created: 13/12/2010 by Laurent Le Goff + +package drawing + +// NewLineStroker creates a new line stroker. +func NewLineStroker(c LineCap, j LineJoin, flattener Flattener) *LineStroker { + l := new(LineStroker) + l.Flattener = flattener + l.HalfLineWidth = 0.5 + l.Cap = c + l.Join = j + return l +} + +// LineStroker draws the stroke portion of a line. +type LineStroker struct { + Flattener Flattener + HalfLineWidth float64 + Cap LineCap + Join LineJoin + vertices []float64 + rewind []float64 + x, y, nx, ny float64 +} + +// MoveTo implements the path builder interface. +func (l *LineStroker) MoveTo(x, y float64) { + l.x, l.y = x, y +} + +// LineTo implements the path builder interface. +func (l *LineStroker) LineTo(x, y float64) { + l.line(l.x, l.y, x, y) +} + +// LineJoin implements the path builder interface. +func (l *LineStroker) LineJoin() {} + +func (l *LineStroker) line(x1, y1, x2, y2 float64) { + dx := (x2 - x1) + dy := (y2 - y1) + d := vectorDistance(dx, dy) + if d != 0 { + nx := dy * l.HalfLineWidth / d + ny := -(dx * l.HalfLineWidth / d) + l.appendVertex(x1+nx, y1+ny, x2+nx, y2+ny, x1-nx, y1-ny, x2-nx, y2-ny) + l.x, l.y, l.nx, l.ny = x2, y2, nx, ny + } +} + +// Close implements the path builder interface. +func (l *LineStroker) Close() { + if len(l.vertices) > 1 { + l.appendVertex(l.vertices[0], l.vertices[1], l.rewind[0], l.rewind[1]) + } +} + +// End implements the path builder interface. +func (l *LineStroker) End() { + if len(l.vertices) > 1 { + l.Flattener.MoveTo(l.vertices[0], l.vertices[1]) + for i, j := 2, 3; j < len(l.vertices); i, j = i+2, j+2 { + l.Flattener.LineTo(l.vertices[i], l.vertices[j]) + } + } + for i, j := len(l.rewind)-2, len(l.rewind)-1; j > 0; i, j = i-2, j-2 { + l.Flattener.LineTo(l.rewind[i], l.rewind[j]) + } + if len(l.vertices) > 1 { + l.Flattener.LineTo(l.vertices[0], l.vertices[1]) + } + l.Flattener.End() + // reinit vertices + l.vertices = l.vertices[0:0] + l.rewind = l.rewind[0:0] + l.x, l.y, l.nx, l.ny = 0, 0, 0, 0 + +} + +func (l *LineStroker) appendVertex(vertices ...float64) { + s := len(vertices) / 2 + l.vertices = append(l.vertices, vertices[:s]...) + l.rewind = append(l.rewind, vertices[s:]...) +} diff --git a/drawing/text.go b/drawing/text.go new file mode 100644 index 0000000..d7ff5c2 --- /dev/null +++ b/drawing/text.go @@ -0,0 +1,67 @@ +package drawing + +import ( + "github.com/golang/freetype/truetype" + "golang.org/x/image/math/fixed" +) + +// DrawContour draws the given closed contour at the given sub-pixel offset. +func DrawContour(path PathBuilder, ps []truetype.Point, dx, dy float64) { + if len(ps) == 0 { + return + } + startX, startY := pointToF64Point(ps[0]) + path.MoveTo(startX+dx, startY+dy) + q0X, q0Y, on0 := startX, startY, true + for _, p := range ps[1:] { + qX, qY := pointToF64Point(p) + on := p.Flags&0x01 != 0 + if on { + if on0 { + path.LineTo(qX+dx, qY+dy) + } else { + path.QuadCurveTo(q0X+dx, q0Y+dy, qX+dx, qY+dy) + } + } else if !on0 { + midX := (q0X + qX) / 2 + midY := (q0Y + qY) / 2 + path.QuadCurveTo(q0X+dx, q0Y+dy, midX+dx, midY+dy) + } + q0X, q0Y, on0 = qX, qY, on + } + // Close the curve. + if on0 { + path.LineTo(startX+dx, startY+dy) + } else { + path.QuadCurveTo(q0X+dx, q0Y+dy, startX+dx, startY+dy) + } +} + +// FontExtents contains font metric information. +type FontExtents struct { + // Ascent is the distance that the text + // extends above the baseline. + Ascent float64 + + // Descent is the distance that the text + // extends below the baseline. The descent + // is given as a negative value. + Descent float64 + + // Height is the distance from the lowest + // descending point to the highest ascending + // point. + Height float64 +} + +// Extents returns the FontExtents for a font. +// TODO needs to read this https://developer.apple.com/fonts/TrueType-Reference-Manual/RM02/Chap2.html#intro +func Extents(font *truetype.Font, size float64) FontExtents { + bounds := font.Bounds(fixed.Int26_6(font.FUnitsPerEm())) + scale := size / float64(font.FUnitsPerEm()) + return FontExtents{ + Ascent: float64(bounds.Max.Y) * scale, + Descent: float64(bounds.Min.Y) * scale, + Height: float64(bounds.Max.Y-bounds.Min.Y) * scale, + } +} diff --git a/drawing/transformer.go b/drawing/transformer.go new file mode 100644 index 0000000..4e31720 --- /dev/null +++ b/drawing/transformer.go @@ -0,0 +1,39 @@ +// Copyright 2010 The draw2d Authors. All rights reserved. +// created: 13/12/2010 by Laurent Le Goff + +package drawing + +// Transformer apply the Matrix transformation tr +type Transformer struct { + Tr Matrix + Flattener Flattener +} + +// MoveTo implements the path builder interface. +func (t Transformer) MoveTo(x, y float64) { + u := x*t.Tr[0] + y*t.Tr[2] + t.Tr[4] + v := x*t.Tr[1] + y*t.Tr[3] + t.Tr[5] + t.Flattener.MoveTo(u, v) +} + +// LineTo implements the path builder interface. +func (t Transformer) LineTo(x, y float64) { + u := x*t.Tr[0] + y*t.Tr[2] + t.Tr[4] + v := x*t.Tr[1] + y*t.Tr[3] + t.Tr[5] + t.Flattener.LineTo(u, v) +} + +// LineJoin implements the path builder interface. +func (t Transformer) LineJoin() { + t.Flattener.LineJoin() +} + +// Close implements the path builder interface. +func (t Transformer) Close() { + t.Flattener.Close() +} + +// End implements the path builder interface. +func (t Transformer) End() { + t.Flattener.End() +} diff --git a/drawing/util.go b/drawing/util.go new file mode 100644 index 0000000..1eba3ff --- /dev/null +++ b/drawing/util.go @@ -0,0 +1,68 @@ +package drawing + +import ( + "math" + + "golang.org/x/image/math/fixed" + + "github.com/golang/freetype/raster" + "github.com/golang/freetype/truetype" +) + +// PixelsToPoints returns the points for a given number of pixels at a DPI. +func PixelsToPoints(dpi, pixels float64) (points float64) { + points = (pixels * 72.0) / dpi + return +} + +// PointsToPixels returns the pixels for a given number of points at a DPI. +func PointsToPixels(dpi, points float64) (pixels float64) { + pixels = (points * dpi) / 72.0 + return +} + +func abs(i int) int { + if i < 0 { + return -i + } + return i +} + +func distance(x1, y1, x2, y2 float64) float64 { + return vectorDistance(x2-x1, y2-y1) +} + +func vectorDistance(dx, dy float64) float64 { + return float64(math.Sqrt(dx*dx + dy*dy)) +} + +func toFtCap(c LineCap) raster.Capper { + switch c { + case RoundCap: + return raster.RoundCapper + case ButtCap: + return raster.ButtCapper + case SquareCap: + return raster.SquareCapper + } + return raster.RoundCapper +} + +func toFtJoin(j LineJoin) raster.Joiner { + switch j { + case RoundJoin: + return raster.RoundJoiner + case BevelJoin: + return raster.BevelJoiner + } + return raster.RoundJoiner +} + +func pointToF64Point(p truetype.Point) (x, y float64) { + return fUnitsToFloat64(p.X), -fUnitsToFloat64(p.Y) +} + +func fUnitsToFloat64(x fixed.Int26_6) float64 { + scaled := x << 2 + return float64(scaled/256) + float64(scaled%256)/256.0 +} diff --git a/ema_series.go b/ema_series.go new file mode 100644 index 0000000..44415b5 --- /dev/null +++ b/ema_series.go @@ -0,0 +1,131 @@ +package chart + +import "fmt" + +const ( + // DefaultEMAPeriod is the default EMA period used in the sigma calculation. + DefaultEMAPeriod = 12 +) + +// Interface Assertions. +var ( + _ Series = (*EMASeries)(nil) + _ FirstValuesProvider = (*EMASeries)(nil) + _ LastValuesProvider = (*EMASeries)(nil) +) + +// EMASeries is a computed series. +type EMASeries struct { + Name string + Style Style + YAxis YAxisType + + Period int + InnerSeries ValuesProvider + + cache []float64 +} + +// GetName returns the name of the time series. +func (ema EMASeries) GetName() string { + return ema.Name +} + +// GetStyle returns the line style. +func (ema EMASeries) GetStyle() Style { + return ema.Style +} + +// GetYAxis returns which YAxis the series draws on. +func (ema EMASeries) GetYAxis() YAxisType { + return ema.YAxis +} + +// GetPeriod returns the window size. +func (ema EMASeries) GetPeriod() int { + if ema.Period == 0 { + return DefaultEMAPeriod + } + return ema.Period +} + +// Len returns the number of elements in the series. +func (ema EMASeries) Len() int { + return ema.InnerSeries.Len() +} + +// GetSigma returns the smoothing factor for the serise. +func (ema EMASeries) GetSigma() float64 { + return 2.0 / (float64(ema.GetPeriod()) + 1) +} + +// GetValues gets a value at a given index. +func (ema *EMASeries) GetValues(index int) (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + vx, _ := ema.InnerSeries.GetValues(index) + x = vx + y = ema.cache[index] + return +} + +// GetFirstValues computes the first moving average value. +func (ema *EMASeries) GetFirstValues() (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + x, _ = ema.InnerSeries.GetValues(0) + y = ema.cache[0] + return +} + +// GetLastValues computes the last moving average value but walking back window size samples, +// and recomputing the last moving average chunk. +func (ema *EMASeries) GetLastValues() (x, y float64) { + if ema.InnerSeries == nil { + return + } + if len(ema.cache) == 0 { + ema.ensureCachedValues() + } + lastIndex := ema.InnerSeries.Len() - 1 + x, _ = ema.InnerSeries.GetValues(lastIndex) + y = ema.cache[lastIndex] + return +} + +func (ema *EMASeries) ensureCachedValues() { + seriesLength := ema.InnerSeries.Len() + ema.cache = make([]float64, seriesLength) + sigma := ema.GetSigma() + for x := 0; x < seriesLength; x++ { + _, y := ema.InnerSeries.GetValues(x) + if x == 0 { + ema.cache[x] = y + continue + } + previousEMA := ema.cache[x-1] + ema.cache[x] = ((y - previousEMA) * sigma) + previousEMA + } +} + +// Render renders the series. +func (ema *EMASeries) Render(r Renderer, canvasBox Box, xrange, yrange Range, defaults Style) { + style := ema.Style.InheritFrom(defaults) + Draw.LineSeries(r, canvasBox, xrange, yrange, style, ema) +} + +// Validate validates the series. +func (ema *EMASeries) Validate() error { + if ema.InnerSeries == nil { + return fmt.Errorf("ema series requires InnerSeries to be set") + } + return nil +} diff --git a/ema_series_test.go b/ema_series_test.go new file mode 100644 index 0000000..184319b --- /dev/null +++ b/ema_series_test.go @@ -0,0 +1,105 @@ +package chart + +import ( + "testing" + + "github.com/wcharczuk/go-chart/v2/testutil" +) + +var ( + emaXValues = LinearRange(1.0, 50.0) + emaYValues = []float64{ + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, 3, 4, 5, 4, 3, 2, + 1, 2, + } + emaExpected = []float64{ + 1, + 1.074074074, + 1.216735254, + 1.422903013, + 1.68787316, + 1.859141815, + 1.943649828, + 1.947823915, + 1.877614736, + 1.886680311, + 1.969148437, + 2.119581886, + 2.33294619, + 2.456431658, + 2.496695979, + 2.459903685, + 2.351762671, + 2.325706177, + 2.375653867, + 2.495975803, + 2.681459077, + 2.779128775, + 2.795489607, + 2.73656445, + 2.607930047, + 2.562898191, + 2.595276103, + 2.699329725, + 2.869749746, + 2.953471987, + 2.956918506, + 2.886035654, + 2.746329309, + 2.691045657, + 2.713931163, + 2.809195522, + 2.971477335, + 3.047664199, + 3.044133518, + 2.966790294, + 2.821102124, + 2.760279745, + 2.778036801, + 2.868552593, + 3.026437586, + 3.098553321, + 3.091253075, + 3.010419514, + 2.86149955, + 2.797684768, + } + emaDelta = 0.0001 +) + +func TestEMASeries(t *testing.T) { + // replaced new assertions helper + + mockSeries := mockValuesProvider{ + emaXValues, + emaYValues, + } + testutil.AssertEqual(t, 50, mockSeries.Len()) + + ema := &EMASeries{ + InnerSeries: mockSeries, + Period: 26, + } + + sig := ema.GetSigma() + testutil.AssertEqual(t, 2.0/(26.0+1), sig) + + var yvalues []float64 + for x := 0; x < ema.Len(); x++ { + _, y := ema.GetValues(x) + yvalues = append(yvalues, y) + } + + for index, yv := range yvalues { + testutil.AssertInDelta(t, yv, emaExpected[index], emaDelta) + } + + lvx, lvy := ema.GetLastValues() + testutil.AssertEqual(t, 50.0, lvx) + testutil.AssertInDelta(t, lvy, emaExpected[49], emaDelta) +} diff --git a/examples/annotations/main.go b/examples/annotations/main.go new file mode 100644 index 0000000..20bf01f --- /dev/null +++ b/examples/annotations/main.go @@ -0,0 +1,44 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + /* + In this example we add an `Annotation` series, which is a special type of series that + draws annotation labels at given X and Y values (as translated by their respective ranges). + + It is important to not that the chart automatically sizes the canvas box to fit the annotations, + As well as automatically assign a series color for the `Stroke` or border component of the series. + + The annotation series is most often used by the original author to show the last value of another series, but + they can be used in other capacities as well. + */ + + graph := chart.Chart{ + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + chart.AnnotationSeries{ + Annotations: []chart.Value2{ + {XValue: 1.0, YValue: 1.0, Label: "One"}, + {XValue: 2.0, YValue: 2.0, Label: "Two"}, + {XValue: 3.0, YValue: 3.0, Label: "Three"}, + {XValue: 4.0, YValue: 4.0, Label: "Four"}, + {XValue: 5.0, YValue: 5.0, Label: "Five"}, + }, + }, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/annotations/output.png b/examples/annotations/output.png new file mode 100644 index 0000000000000000000000000000000000000000..3127025108c238fc96959b532c91da9df933097f GIT binary patch literal 26163 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 K>ORmu8}>g-@<}29 literal 0 HcmV?d00001 diff --git a/examples/axes/main.go b/examples/axes/main.go new file mode 100644 index 0000000..a675bde --- /dev/null +++ b/examples/axes/main.go @@ -0,0 +1,34 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + chart "github.com/wcharczuk/go-chart/v2" +) + +func main() { + + /* + The below will draw the same chart as the `basic` example, except with both the x and y axes turned on. + In this case, both the x and y axis ticks are generated automatically, the x and y ranges are established automatically, the canvas "box" is adjusted to fit the space the axes occupy so as not to clip. + */ + + graph := chart.Chart{ + Series: []chart.Series{ + chart.ContinuousSeries{ + Style: chart.Style{ + StrokeColor: chart.GetDefaultColor(0).WithAlpha(64), + FillColor: chart.GetDefaultColor(0).WithAlpha(64), + }, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/axes/output.png b/examples/axes/output.png new file mode 100644 index 0000000000000000000000000000000000000000..9a16db0787773e4b84bb627441cd1234a7e7f7aa GIT binary patch literal 22406 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 literal 0 HcmV?d00001 diff --git a/examples/axes_labels/main.go b/examples/axes_labels/main.go new file mode 100644 index 0000000..a68ac34 --- /dev/null +++ b/examples/axes_labels/main.go @@ -0,0 +1,40 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + chart "github.com/wcharczuk/go-chart/v2" +) + +func main() { + + /* + The below will draw the same chart as the `basic` example, except with both the x and y axes turned on. + In this case, both the x and y axis ticks are generated automatically, the x and y ranges are established automatically, the canvas "box" is adjusted to fit the space the axes occupy so as not to clip. + */ + + graph := chart.Chart{ + XAxis: chart.XAxis{ + Name: "The XAxis", + }, + YAxis: chart.YAxis{ + Name: "The YAxis", + }, + Series: []chart.Series{ + chart.ContinuousSeries{ + Style: chart.Style{ + StrokeColor: chart.GetDefaultColor(0).WithAlpha(64), + FillColor: chart.GetDefaultColor(0).WithAlpha(64), + }, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/axes_labels/output.png b/examples/axes_labels/output.png new file mode 100644 index 0000000000000000000000000000000000000000..5ca998a1b298025eb666eefb493109f260de20b8 GIT binary patch literal 24546 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 QMGSyQZX$ZqHU1M01GI{*Lx literal 0 HcmV?d00001 diff --git a/examples/bar_chart/main.go b/examples/bar_chart/main.go new file mode 100644 index 0000000..2a7895f --- /dev/null +++ b/examples/bar_chart/main.go @@ -0,0 +1,35 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + graph := chart.BarChart{ + Title: "Test Bar Chart", + Background: chart.Style{ + Padding: chart.Box{ + Top: 40, + }, + }, + Height: 512, + BarWidth: 60, + Bars: []chart.Value{ + {Value: 5.25, Label: "Blue"}, + {Value: 4.88, Label: "Green"}, + {Value: 4.74, Label: "Gray"}, + {Value: 3.22, Label: "Orange"}, + {Value: 3, Label: "Test"}, + {Value: 2.27, Label: "??"}, + {Value: 1, Label: "!!"}, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/bar_chart/output.png b/examples/bar_chart/output.png new file mode 100644 index 0000000000000000000000000000000000000000..321a3414e6355cb11c52ec6c30ba7e89147b2c49 GIT binary patch literal 19152 zcmeIa2{e{(-!6PN3q?hWB8?)Hu`-pUA{jD8Xfl(`Q-+EtNfScIlsT1|P$6YVZeuc3 z$UM*E{Tp1q#;d!N0YckjLS_wBWI>%Sg7ab5Ryo#$^je#dc~?kJr(v4)nFmP8`0 zIdxJ-g+yA8zb+-wEX9|{DR%})B)Py-GDlS%p7k|5sxoOTOb*MZM%}!-ly)7H{iWr1 zWDdMsCc8u<@=lh=(@iDHk57Nx^@xl0G?VbhILmsO^S4j#zejfdtJYbOXx+O*Gw`%iDO9Gw2m}|~ewGbmA)+PAxBkW8w?D$G@r)(u2 zhO})5@o1zYvNXgO_j`=Q7t&@<>K6fN>X$1X)GwcCh&zxTtlQwiKwKEB7@qGko5A>@ zy1Kf!_;_pK64IgV_OKR?Ch99v5Jy7~LRe*Kbgo=`Os5*4**%CdaC zTVc!At>eN8JQ^>f@#n=0EiEk()4C*u5Rv}I^hBkN8#ZiUVcFv`H8)zhnnZfeg2%M7 zpBd{;DOi}<>(kuaJkCzCvbOI05~^KWC1T#Ve8r0C*;xv|m(4&^_Jaox#>U2I`}3S9 z!z5jtqGWv+0&guLsrng`Nbk0t4wsy-6*zFWPZESCwrZ?tR!t(i%onWCM6}s&z~~F zYyG=C+ot;wq;;MJ~6 zHB>Y-?38jQvGD7j&#{S5>+kFoH7I}jyCS6Zt)q2in8fSXuNgQb%Rhf!O-EN49*g(YxiyjTAFRx!IR2e18je)N`*KA-N}DJdF~ ze89ekA}i@PF|x99o9E`_oOyQewPLtr)Cs?h($5ZB{wfa=Ov#_=376PJdRM&-tCRXY z-BjcH^*MhYjeEYn+UX{>@n>T>kKNw1d9xaqm|b7P{jFkTGI?ZVBv{Cp{6@b_IZF1> zp+l!m96NT*$Hym~Vf%>_C&I-Y$)7(PkF{mC%F9n{E2*dmSpPoFDU;_kE;&C|Eo@r%Ox#g`pWmYJ_L?

a_y($LV)LT_(x9~SABBIxhmo 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%0DT62jW`lyy3%A#ZK19p)(!^+=@^<9z zRcFK)F)U{P#mvBpsOOE%Po6MA#(~j{R-Y_G@SRu)7<>lnQ^FxaQRNRBO9(d5BLQt0 zHtm1+@uTb{_uCajAniX0zt=&qcNmO$k|^t>uNWB6a!w31J0q3>lxL==JKEcgmc4_u z>S}9#9-uk+M~t@JVL^+e$$!kxGf($N=oPr~YNhQL5NJdgLd-`y2Imi$jj15_pVSS! zGT9_@~$HB;s| zi0FKGHXAqsYrqDh6QCUWuDVw0mCuh9C8uSQ)#*3~F!w`+hWn0FMpd;2f-tI>C!<`< z$j?GA73URy0Esl{H4NF1kN^$b=B6y;tMI3=aEE|^0Gx0_Lhy)Sbx?Q+B^NC0{d@PA zq{sTdYtTTv&oiou{FZ8nh=HktAHq9s{1^PAc|cv3_9p5$8w$?g&!3imPz3m;@-ZLQi}+W%bU@T7+SrsYro@dK((Mt?f{ROQlz$x*tPa zZk`x%AV_mk+={eRx8wwa>DuxII4)6L-~Kyh(Er)I-A(nQzB?NfntitQSlsIiY!)mV zv|ap`PEqG*C9(2&&m}*+nl^ap21~DWKML*^k!h1EXwRxMf21|aVPoc#AgT6eUnjZT zDFo;slvL`M|G@HSzC`39{abl?czN@nXvBDdiXm55^GL{0f1av`!XGDbeQF4fuc_Ht z!n8(y10E55wqW=pTZo8x!Zjo4k}#Bx3=e-RaC3`sSzN25N{O`~gftRsF}B_F_EzFz zB5JRZ5OXPr9Hb{3()RJ=vprMWT8Vw3(o&Xe-7RC=$?v1%X*W6gxRNsdKfhCD!-C z5fv2`$(gPlSO}DxSjvxq}eq z*UR5WU;-kc%lHeDv_G!jhL3o+4PXWi*8@9tTt;~%usthuC<$?K=)4$v65a9?G3zKO zC}2nzgZeT*JBcw59#6f0uv|bbtzf-qUYpc%n_q_00#|YIKC2pXNY<%EWGOP#|hPDV9CgJ4=L1Img@G7}Z=;fIh zP^cx~i0|64BX|JlS_{KWs<_x+bMii>;x{CQSZLtR~lv@?WV*iAiU;eLdR%ZLtR z1>q(H)7u@im;@1ED}YaO?FXSr457lTVqiZXv5k}SB8=P2tmshi-y}n3RtT|c|Fq6u zPT#;l1VgQ&)V%8Cdg=qcQ@Y0{%6H&E6(AH)mH$SY{>Jgxa98rc?mc_lCcYVhTaoq# z)x334wS-~?Tb+)L%^0{H6n~y)Hw=lDB^~=YILNVi^C9r=3A9N`N#{!sK_^L1w>@$M zmObbY(%u&fZ-4v#9rA=~R24)}rAhifj{pxW3L_mO5@_JTU@8Dqg)2CUNiU~*_U)uwL13-RThSJ&6qfBAC81lr_z{J{|Y@!saPzCMs`F6i^k_ozUA7iuCu-}u0QQi~3o;5xB5inlK|w12MY|DWT`_j|dxK0$YU@dJYve7Pw9%#EX? zqkdb(Ca^IHhl9lnjuMGFbxf684W?sItZ+<-FKTJMbfa$2d|I6asMLFPL8Oks1jc`7G`FG z-M7e}CYbBLj1kkq!otIc4-rZU3D5r}L*&5-e=&I7t%3%pF%1#+P*v^?sM3{3s9Q^a z{KAC`;A|52?iUnfJ8($`wqp-Q%x(yv%vZ0B5QdDuP;Es-L{x&jyu28HO%1o@82+GA zB+mn|fRF|?p?%!B^BIUN+OZ%rbCR&3p%7;pRs90sA)j56_al#~;apC<6epGX_qV@_U zx|6AHypIKH>s4LDIwkfK+jrZCx{3ckORGQq?-sm{4}yZuDI8T-uY(=^MU@eE8v6B~ zojacd1gL|YonAw*SnoI>lS0%&C31m?he%(`F0Prm8xud|Ve}wXZhsIkSjVjguRX7^ zhwBe5>I<~chF3p9&P~5x#nENgxrkD@kjazqJQbIeNI8x~Cj=u>fYOlxyxiQSFnc03 z$u5L19@ziD{{8!R?|uO?2W{r_r%zx1YH^+g1#VZav?rZQO^Anb{sfFMWM6EQBybVB z5#gyX!c+*o4hI4T+uMaOsl=;ficx9TA+Pho!3hL$W?CWb!VqCaJv0I*s;b&^^+Y6} zxP(NE4s|R9yaOrlpK5&28qf`?gV>Sehg9PCGNir!xr(5dx)0|GP@S>yw@x2hw=Re77K&c{XN+jPYmy&b*=rFeFJv4;eF58o~|s= z;-OF$p4>El8>(PV{OC_J6E?H9ho-kWQe>XBSJ8x_m)1PjzTIrZ|s-IZe9XHL- z*7Pf1{`L74hsVWxj?4P3gF&aud7H5MMx7+wNlN(`Tkq%h7NL^%%B{=dUsHVeMEFNI zd>^Vs?eI!6qvM;pV!TWEYP1nZN`u% z)Zz7P1N9r<9de)6ly)t>rGNQyHSleJbsht|_*cH=Z~&^w$=$8d1r&g`l%glqELiiR zU>|F6$h5F&!l3f=^$NU6l;329)~F-9SQ|Abdq3|{y#47@!b8XJ5#T$yf0Ex_$>6UR zKGuHelGt}U_xuw#N;mg8&9D$S9Wl&hu9tuP9L>*;j$P^C4q%KHGO6k6sZHeemorIu zUbhI{ukZ*6Si#^yw!>8zX>jZ)6|xUx;ud)E-@iXQVL?g50rp`p6rb*zsYo?DJfqW7+T@S9#g4(C5 zfM@%^rFH_S-defF$u;WOE(~>`+fr2G;lxB25CVIWz#74imhy_K(Uq2!(XCyJ^AII4 zjEzggv6T1}ERVwyW44@uTe1~38|o^~NGiAPc$9+1k8=qfu&U@n(u8vxk%p(U>nLS* z@uMRxJn)lRa5x*}?oKjh-`kH9Z*^m;ILw%+k+NWY`wk@wuFv!5n}BvNU%KQpIWQ0Q z6(d^;S=Pl*weED;Nw!8x@#x6S)+G-lrwGKz7>RO+&h6*pGYcZLEM>)E=Ls|10w(5Y z=Di>{dBDVCn|5yneQjl9V}pNMMZZa@qE~fT=>C>NmkbOtV80g>6yz*|MurFV4|iK| zL|7pfK|XN^T=@hMn&8H9R*tg>+%?QFa1OvKW@2uhEK!NYB+dllSQTiUZa*tz8EVvO z8X63A9CWm_IL!Dp$JR7&At{}mCw+`hOl-E)pNG~n68*h{GV8SjDe#Cm9l5i)<;g;G zRl->KBWxQ=|27P^XrV1FEkIRh0zhK>_U;W5wP*nel^$C>s;{rl%+5XlT`xsf0v0Dd zSlMy(&K^h0Y^lTl;QP`*48B6$feR6PNaA|@uA~Pzj0Eck`T-6Y_=m$Iiqmv}UFa}; z3N|3iVBO(b;f@i<26H9Yx>5v`dXnaFvwbU$qje8@#Wllz4hpTQsfqCJ!gdF&q~4fs z-FXIM4R{{R9$d|{x^EqZA?Tpmhro>syAVhTbUd9H6>yn7;LqT50B(nb2Chh(;2t6Q zVFXUm$t9oiTSd=C}l(c$6Gv zFWjN!dXyOrut>1(yFj_dOdlp}s;;XWmU9~aGZyP7b<9VAY|mX>R0OvkrX1**Jt95M z(Qnj$u07)UnQh@Y3neosIJgH6P*rYhU|)ZKxa$&-pfdzpc>3uOa0)Xs^Y|bROf1YV zcQ*`p_Uzf?$5HdDeFXTs4Ydz5{yuXI-BySr6bqafoW_xWWy_Wkhs(6I4rAKHUZrDm zA;W=3)W+Ey2nknP-oia-0p|QeYpdQ2-6cdLB(Vh;;9!~r@;;=fs5n2LmHsqMB@ux? zm^T@go<7bXHTTNw+Z!C_NXEj=um_(vYt7f0@tej00e)_7Ezoq4$9?b`_`Kx7h=`8~ zGqLShroh*)hoMXE*n-3hflFo1D`B1Vv+o{}fu=@a+?yAm#Fct0xY^0@C* ztDvy3|L%Eg3oHapOC0ib=SW}Ul%uG};Xs*Ox^xLP&UqY}6IUn!VFC9i>;X9QsX}wn z+}s7Hn((|sl^i2JNv~chHExn}eVbN=;Sj{5+;^PXu(P#gmL`1U7!#$W^kzDM1i}wm zO2?=G1}jD=?cB8s2fWVFTr@Vu5h>-pBv{mrXidO^!M1m59Vtw~SKWkp<3@I#YTOjM zGb-P2@Sz}4uTkZp=ZwG5Ll9dKj5_?<_F~+{aauTRuQt4T|Ho5dh~r%F;*AY7&k~2K z-6(lbpaJUegRtJHo$2^vfagtKS78gm1E8sj1$B(@38_T zMaZaR>@$TmB1R5iFs)adIre*Qu9S{2fRQV<48Xv&nI z48y+?yXBIJxdwJ#UU4#|~pS!}K-NDMdkj&|+Zl!_Uf`IKcrq z40aEb^ur<|8L+kO->(!^1@6(*IHi}9lk>Z?GX<)d zkWdyMzxKuZ6PP>e#upKh-Oja?D!Xb1Jhs5lMvPj`@wr8tW|5jo-m!_{R z!qSkm<5ol7)6uZzH@=P{9A8=Z$gh2a%AYeXJ$i{|z5mICkIPTjY&yEy#G7W_(7M&$ z&yVj9=GN3@JXPd<)0>MmQe3m}SP?luvU#8EINNYy(Hff! z0V%4=X#b`UqOrUNR#qy?PhcEP+P8b>&N*~jp!i>x&CJY>A1?-Bv}J7xG+Ag@IA8L^ zD*N zyrDr8csP;^cJL_O6vFJZXZLQK!#XZ5E_iYXW}EWk%^Vpd#=hoFwuFR+hCX^^1zi>n zFZe&6GXzanJ|fPAySgsi<$39V90MUgQ!ZGE2CJ&3hCZQxbZuM?77V^x#Vzk{UlAGj$P0s}YVW#&cl*Aco*o!3K%s1=SzcON3QGLZ z~8SjGc#o(;|^faTEE4k^BLU=uxxmnmB4CqHmtzr^Z3AiR17|H+$oQS#Dl$pEC&8-0WvgkLNMIoI?T6Y zHOUD+BL1I0pYkf?v^p*={h_ZfDU0ENKL zR*Nbi$Vh{eGPogGp8rnD%2lh>)Xa^H7&$C*`$ej{C^+bukT8RM^mf8|K_I-q$>$CF zH;%kB6G=?yvCG922>Ys~UZh|C$)@ ziq6sLIoE=zZ*9XK&Icdv9vLKgoJ_2JS^G<|my+}S_0A`)HQhExbLX-}QZ1ziYt|2n zI{^TRv-{yF%Iy4^*t6GdF)yMOAatt2!LmId~y=fvyT&KP#ksrUQ^RP>_ES=kj>)l zIt~tkYrfjRq|Y>_6j^1oFx7fGu@=7>z^pDSdgGYwfw#wg>s{*LKB~L))xb^u_sh5O zR>j+*QNwY9<7ukm`~qFsKQK9@zIg-3eIo4BKok9~1r)?2qaLvT53uKlLkH@#EtiAruC47j4hDVu`t>WBO#F%gyyenuk1NZ`$w4SiRyQ>^?gqhIT>W?nY2B$Ex)ZBOiCN88{Ypjy z8MMZE&)M2m4^F~P3x7GqlSQ}T$3@vUo}Md`)n@~FERQ>%@}{%vw{wQSvbvi%xCUwI zC0-^WA;CYy>Tqb&#bxfFKJqe?-g`F0$7sKKGXe;#y)OVX)Gz>T%cmu>`HYH1I9}lm zXU6+ zET)R_p2U=a#`Ip4zWj~=?GF-Mq<02UD`?&w-r!gDBfXzQniE?TyY76Y3Lhsus1)M= l{X+UbdkNYLV3MFvRCEh(u8UEMAvX2Y@iQ_nr7zt4e*jDGj_m*d literal 0 HcmV?d00001 diff --git a/examples/bar_chart_base_value/main.go b/examples/bar_chart_base_value/main.go new file mode 100644 index 0000000..f17b6b8 --- /dev/null +++ b/examples/bar_chart_base_value/main.go @@ -0,0 +1,62 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +func main() { + profitStyle := chart.Style{ + FillColor: drawing.ColorFromHex("13c158"), + StrokeColor: drawing.ColorFromHex("13c158"), + StrokeWidth: 0, + } + + lossStyle := chart.Style{ + FillColor: drawing.ColorFromHex("c11313"), + StrokeColor: drawing.ColorFromHex("c11313"), + StrokeWidth: 0, + } + + sbc := chart.BarChart{ + Title: "Bar Chart Using BaseValue", + Background: chart.Style{ + Padding: chart.Box{ + Top: 40, + }, + }, + Height: 512, + BarWidth: 60, + YAxis: chart.YAxis{ + Ticks: []chart.Tick{ + {Value: -4.0, Label: "-4"}, + {Value: -2.0, Label: "-2"}, + {Value: 0, Label: "0"}, + {Value: 2.0, Label: "2"}, + {Value: 4.0, Label: "4"}, + {Value: 6.0, Label: "6"}, + {Value: 8.0, Label: "8"}, + {Value: 10.0, Label: "10"}, + {Value: 12.0, Label: "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!"}, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + sbc.Render(chart.PNG, f) +} diff --git a/examples/bar_chart_base_value/output.png b/examples/bar_chart_base_value/output.png new file mode 100644 index 0000000000000000000000000000000000000000..94231c8515f1e847e9fd3afe7a2271189cf82d00 GIT binary patch literal 18491 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 literal 0 HcmV?d00001 diff --git a/examples/basic/main.go b/examples/basic/main.go new file mode 100644 index 0000000..aeca5a8 --- /dev/null +++ b/examples/basic/main.go @@ -0,0 +1,23 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + graph := chart.Chart{ + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/basic/output.png b/examples/basic/output.png new file mode 100644 index 0000000000000000000000000000000000000000..fa0573accefca222ba0c5f6f8b04178e5240365f GIT binary patch literal 24432 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 literal 0 HcmV?d00001 diff --git a/examples/benchmark_line_charts/main.go b/examples/benchmark_line_charts/main.go new file mode 100644 index 0000000..1a70417 --- /dev/null +++ b/examples/benchmark_line_charts/main.go @@ -0,0 +1,52 @@ +package main + +//go:generate go run main.go + +import ( + "fmt" + "math/rand" + "os" + "time" + + "github.com/wcharczuk/go-chart/v2" +) + +func random(min, max float64) float64 { + return rand.Float64()*(max-min) + min +} + +func main() { + numValues := 1024 + numSeries := 100 + series := make([]chart.Series, numSeries) + + for i := 0; i < numSeries; i++ { + xValues := make([]time.Time, numValues) + yValues := make([]float64, numValues) + + for j := 0; j < numValues; j++ { + xValues[j] = time.Now().AddDate(0, 0, (numValues-j)*-1) + yValues[j] = random(float64(-500), float64(500)) + } + + series[i] = chart.TimeSeries{ + Name: fmt.Sprintf("aaa.bbb.hostname-%v.ccc.ddd.eee.fff.ggg.hhh.iii.jjj.kkk.lll.mmm.nnn.value", i), + XValues: xValues, + YValues: yValues, + } + } + + graph := chart.Chart{ + XAxis: chart.XAxis{ + Name: "Time", + }, + YAxis: chart.YAxis{ + Name: "Value", + }, + Series: series, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/benchmark_line_charts/output.png b/examples/benchmark_line_charts/output.png new file mode 100644 index 0000000000000000000000000000000000000000..588d6a288596ae2b8770089fa3ef4fa8227f709e GIT binary patch literal 321567 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

gF*w=0>e)X0fyA!GHt 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%0AO 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

}W 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" + + "" + + "" + + "")) + + pie := chart.PieChart{ + // Notes: * Setting ClassName will cause all other inline styles to be dropped! + // * The following type classes may be added additionally: stroke, fill, text + Background: chart.Style{ClassName: "background"}, + Canvas: chart.Style{ + ClassName: "canvas", + }, + Width: 512, + Height: 512, + Values: []chart.Value{ + {Value: 5, Label: "Blue", Style: chart.Style{ClassName: "blue"}}, + {Value: 5, Label: "Green", Style: chart.Style{ClassName: "green"}}, + {Value: 4, Label: "Gray", Style: chart.Style{ClassName: "gray"}}, + }, + } + + err := pie.Render(chart.SVG, res) + if err != nil { + fmt.Printf("Error rendering pie chart: %v\n", err) + } + res.Write([]byte("")) +} + +func css(res http.ResponseWriter, req *http.Request) { + res.Header().Set("Content-Type", "text/css") + res.Write([]byte("svg .background { fill: white; }" + + "svg .canvas { fill: white; }" + + "svg .blue.fill.stroke { fill: blue; stroke: lightblue; }" + + "svg .green.fill.stroke { fill: green; stroke: lightgreen; }" + + "svg .gray.fill.stroke { fill: gray; stroke: lightgray; }" + + "svg .blue.text { fill: white; }" + + "svg .green.text { fill: white; }" + + "svg .gray.text { fill: white; }")) +} + +func main() { + http.HandleFunc("/", inlineSVGWithClasses) + http.HandleFunc("/main.css", css) + log.Fatal(http.ListenAndServe(":8080", nil)) +} diff --git a/examples/custom_formatters/main.go b/examples/custom_formatters/main.go new file mode 100644 index 0000000..d2b6b90 --- /dev/null +++ b/examples/custom_formatters/main.go @@ -0,0 +1,38 @@ +package main + +//go:generate go run main.go + +import ( + "fmt" + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + /* + In this example we use a custom `ValueFormatter` for the y axis, letting us specify how to format text of the y-axis ticks. + You can also do this for the x-axis, or the secondary y-axis. + This example also shows what the chart looks like with the x-axis left off or not shown. + */ + + graph := chart.Chart{ + YAxis: chart.YAxis{ + ValueFormatter: func(v interface{}) string { + if vf, isFloat := v.(float64); isFloat { + return fmt.Sprintf("%0.6f", vf) + } + return "" + }, + }, + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/custom_formatters/output.png b/examples/custom_formatters/output.png new file mode 100644 index 0000000000000000000000000000000000000000..8d8b4e95fa33127b0c40a06f0da422ab4b705792 GIT binary patch literal 29669 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 q)Sb{}l7D0weyIv!h>e7@m|M*`^-`z+6 literal 0 HcmV?d00001 diff --git a/examples/custom_padding/main.go b/examples/custom_padding/main.go new file mode 100644 index 0000000..14c23ec --- /dev/null +++ b/examples/custom_padding/main.go @@ -0,0 +1,34 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +func main() { + graph := chart.Chart{ + Background: chart.Style{ + Padding: chart.Box{ + Top: 50, + Left: 25, + Right: 25, + Bottom: 10, + }, + FillColor: drawing.ColorFromHex("efefef"), + }, + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: chart.Seq{Sequence: chart.NewLinearSequence().WithStart(1.0).WithEnd(100.0)}.Values(), + YValues: chart.Seq{Sequence: chart.NewRandomSequence().WithLen(100).WithMin(100).WithMax(512)}.Values(), + }, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/custom_padding/output.png b/examples/custom_padding/output.png new file mode 100644 index 0000000000000000000000000000000000000000..63c17cc1324e58d6042acc049cb0cbf7e19e8959 GIT binary patch literal 66998 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±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\nBlueGreenGray \ No newline at end of file diff --git a/examples/custom_stylesheets/main.go b/examples/custom_stylesheets/main.go new file mode 100644 index 0000000..1af1058 --- /dev/null +++ b/examples/custom_stylesheets/main.go @@ -0,0 +1,88 @@ +package main + +import ( + "fmt" + "log" + "net/http" + + "github.com/wcharczuk/go-chart/v2" +) + +const style = "svg .background { fill: white; }" + + "svg .canvas { fill: white; }" + + "svg .blue.fill.stroke { fill: blue; stroke: lightblue; }" + + "svg .green.fill.stroke { fill: green; stroke: lightgreen; }" + + "svg .gray.fill.stroke { fill: gray; stroke: lightgray; }" + + "svg .blue.text { fill: white; }" + + "svg .green.text { fill: white; }" + + "svg .gray.text { fill: white; }" + +func svgWithCustomInlineCSS(res http.ResponseWriter, _ *http.Request) { + res.Header().Set("Content-Type", chart.ContentTypeSVG) + + // Render the CSS with custom css + err := pieChart().Render(chart.SVGWithCSS(style, ""), res) + if err != nil { + fmt.Printf("Error rendering pie chart: %v\n", err) + } +} + +func svgWithCustomInlineCSSNonce(res http.ResponseWriter, _ *http.Request) { + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src + // This should be randomly generated on every request! + const nonce = "RAND0MBASE64" + + res.Header().Set("Content-Security-Policy", fmt.Sprintf("style-src 'nonce-%s'", nonce)) + res.Header().Set("Content-Type", chart.ContentTypeSVG) + + // Render the CSS with custom css and a nonce. + // Try changing the nonce to a different string - your browser should block the CSS. + err := pieChart().Render(chart.SVGWithCSS(style, nonce), res) + if err != nil { + fmt.Printf("Error rendering pie chart: %v\n", err) + } +} + +func svgWithCustomExternalCSS(res http.ResponseWriter, _ *http.Request) { + // Add external CSS + res.Write([]byte( + `` + + `` + + ``)) + + res.Header().Set("Content-Type", chart.ContentTypeSVG) + err := pieChart().Render(chart.SVG, res) + if err != nil { + fmt.Printf("Error rendering pie chart: %v\n", err) + } +} + +func pieChart() chart.PieChart { + return chart.PieChart{ + // Note that setting ClassName will cause all other inline styles to be dropped! + Background: chart.Style{ClassName: "background"}, + Canvas: chart.Style{ + ClassName: "canvas", + }, + Width: 512, + Height: 512, + Values: []chart.Value{ + {Value: 5, Label: "Blue", Style: chart.Style{ClassName: "blue"}}, + {Value: 5, Label: "Green", Style: chart.Style{ClassName: "green"}}, + {Value: 4, Label: "Gray", Style: chart.Style{ClassName: "gray"}}, + }, + } +} + +func css(res http.ResponseWriter, req *http.Request) { + res.Header().Set("Content-Type", "text/css") + res.Write([]byte(style)) +} + +func main() { + http.HandleFunc("/", svgWithCustomInlineCSS) + http.HandleFunc("/nonce", svgWithCustomInlineCSSNonce) + http.HandleFunc("/external", svgWithCustomExternalCSS) + http.HandleFunc("/main.css", css) + log.Fatal(http.ListenAndServe(":8080", nil)) +} diff --git a/examples/custom_ticks/main.go b/examples/custom_ticks/main.go new file mode 100644 index 0000000..f95f64d --- /dev/null +++ b/examples/custom_ticks/main.go @@ -0,0 +1,42 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + /* + In this example we set a custom set of ticks to use for the y-axis. It can be (almost) whatever you want, including some custom labels for ticks. + Custom ticks will supercede a custom range, which will supercede automatic generation based on series values. + */ + + graph := chart.Chart{ + YAxis: chart.YAxis{ + Range: &chart.ContinuousRange{ + Min: 0.0, + Max: 4.0, + }, + Ticks: []chart.Tick{ + {Value: 0.0, Label: "0.00"}, + {Value: 2.0, Label: "2.00"}, + {Value: 4.0, Label: "4.00"}, + {Value: 6.0, Label: "6.00"}, + {Value: 8.0, Label: "Eight"}, + {Value: 10.0, Label: "Ten"}, + }, + }, + Series: []chart.Series{ + chart.ContinuousSeries{ + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/custom_ticks/output.png b/examples/custom_ticks/output.png new file mode 100644 index 0000000000000000000000000000000000000000..fc9d7b616474aee55c2f6ebc2385d4e56b3e4866 GIT binary patch literal 17745 zcmeHvWmHvd*X~9X9s^MkP*RbQmX^jq+=3ttn^HhJq)S3kQ4tUjkd~4LDd`ZT8>HE! zba%sqx|aY8z_|ICG_1}N{$ip*prS*6WFblKy*ue88^=@lFG0rDEVpBv6HbS zbu3Q3O7UOFm_?M7Xf)(wI7YhP#=g|JmX66Ke|v@eRNnQMMnRI8Aik>-_vvnvF;b#G z^EA3}Ieb3bcj-nbeZ!gUkYXjlX)_f}8G3FN~vEwU)o zm#fGUQ4)7vVv2Adimh#I8XFpBY07tJQ^&`~!p4~{AYXWp<(Tzln-6^N5*2el+#j$g zP8W33MWv$f;7fJ}aq;q!63u}4u2fa`)q1AWWNg#zabEQ3g@JrOA0Kny=sIEC?Y+@5 zG8bv5H=NM{LiY35k9pMo@FeWX&@$x?t?{8Gr=Va#cl76(`q7FX77rg-9PDm*5!2G} znJ66{9=IO86FGhcZj-CvC$d_%KGW$(Bf2{oZs|)S>I~lp(7Wy}(g$mm5MBiVBmzckj(sqk4|P&i3mQCr)U5Hw)!4Y!TfWR8&^xb6%fj z*Z96Z+a(=9pV(Pw)E@ik)2GbxL+7CqCmpw)geBrLnk~Yp%N8Lkui<7MU-k9%=lgP| zR?F-ggV{Mk=HOA5B`Y<;OC=D8{Tt(8WTZNL5t`C7u1*R1y&5heei^IZD1dmld1&%lG;$L_CM zN+aK+Fmbm$3Gz&P7863Wg{;QzK7KsX5X1^k*x4ICIwW_~z#VTJ#R&oe1AYB8jeLuV zh9G5SwKge1p#WA;tix1u8F;WF1A9d}o(oOxgN1h`=Skh3XP?mY6_9%R9v zKCL(Lv^r|vlaxdUeDe2?x!y40T170jJyP)k9~WsVhBxQ?0{#6*odiw0(~72Ey?V6{ zp`!bTpZMWTHa4@G50}R#HX&?SV1=xI-&a;HKir*jTAOrg87y{KDzcj^a##{GX!@L# zlr$CPvbeo6o{}QAHE4sZ1AeEZoE>MUMn3%J{jl(B$11?L*Q$ucZD)TO&vmC8wnix{ z+qFapj^!$+s<^JVORcP|(7Nwi$;!4|^Al0f)?R#eQvXez3C}Jq zERR-s5)yBg?9ZlV9>d2M<+QQ3cH18HVpjaRf4Ei7$;`Y{ezaHay0_^hHUNu-^>J`> zTko#V4170tfeWKuH~ac>3~6sZ8|gEQPT$M<qBo}Us-ACy{+;i*VW(kM+d`4rPHeK7(8cb3{N5c)|T@6%^R`3`JDFl_NB5t z3kZ*$a^j*Uzmggc|MBAX@SYl3x{`sfi)B_*uQcK|;Sh<4VdGSzdwf|oajaFQ?K&kvWoZ_IWDGCstVyB&PF z<;l&>{r>%XiX$sry!*mX3IUApER`C#Q>>&n0TD%fXIE$J(qJLa)vHe`U!9B;cAyb= zE9o+6Zfg2OZw&7s6lpQp6#DMnyUs*8azp;Z@jr1wdUtm&v)FFV9=<$rn(R5?EW5;2 z;m8(ju>)+0R>^!F=m2=?g$ozxd<9+_!d9U?400g?e)w>v zwGm^puB_bL+-xTlnOVAtk&$T%loQ+ODL>qRXu0l2`z0+cEjO2!jZLQH!-o%_=$XaE zbpql`N<`w?ulvr~7A-F?mz0#$%#HpD0@V>Wttv;Ksj&qE1}xv`*2pnzZE0@C=37Q@ z3F6`5*_Ge8apT*NWpA4m@!wd?zgpK=|0#{_- zT}Z7jbs+srm}y3`9p=G<27s8=wPT)m_yljqB`pHzpFVvmNOjh#ttbFa zuux>(`)jS0H=bqdNjZ{QiYhb*H>e~TAEyu9QT3+&zTyj)g`~DRoYOytHiLUPHPTFpQG0A zXv7jdaA1~TD#R4koc@E$qLq>}nrzt1!jz3j7ToOpQ##QGak?F>jGh7gg8lj*i)-qC z+`=1^=H|wzZpq=cady-eEvS-bpjlognyZsUrYcnQJ@6qxwVBer&y|y3e||pmK+}lQ zB_$YlbvkQ?twEIO3U+*V5$`arI)#g_P5+S$L7`y@cbV#|`Y-g=$7haVin?_^;I1bU zoO?!XpT9j6w|6%27gjXGlDkfE?_QYCgM54I`;P`JH|Opk7ghw-GoYOqHq&koTy-es zB-lR9LZvm>=_up8^M)gaC)1CglGIg=GQ4I@8uzBp7_O(=)1;|;Nu609$oBsAxlJNR zK6kI-l1)MV6^9Q&_?b=qt~xj**H)7xJ9B?!=czy|@$$etM_|n4No;-3y|8ubZ0(b( zx!Cz0FJuWGD(vOI7E4zRRQz`plS}o?KB_s{Jg#jM-jfVnf3R0q5uA~0eg(PmOJ35q zLXiRELh(mA-sb1u%YK*(UvF6ceIrMH<{~Shu~CN`$u-=CCwe10+B;LW8p6F!nHie3 z=$Gnp*BQhGbo1O!tGrAqlQaAY7Y>c=;fxnUcllCR^hx{R_)oUqGH~!dN_{oL>`M30 zS@7!aDJ|z5zN@&qGAqL=pH>|b(Tpb`Jn{KVb}?2}L0Br>=RwF#^(P%}(pQknMz{sF z6nvF8hUDiSy)a3)rk}&IT2g$H$5t)L`JlU5vtne%joERJUq)L^?7ZHD{h`fISvmhA zwrA;brc4QArT!zKyM!lh_$8A5d7tkl#jL51NIiF>@Z2KlLkFc-KKnF8244@nHPbD7 z79OpEJIyxU5PItT{!-PUCYD@MrJF^$B$U$)0`^3ad^h^_AFV%;885tmJ4fF5__zsG$Z1ew3^o^-UkUhB$x=MIS<=(ktAME|LBw?@;U|FeN+neD?2AerU^GOpHTV2r)7O3?+e-adV3cqf-bk3Z+uI5?r z&@Uk*%}P)zx^k4F)Q|6xeJGGSAGBZ5IES3Ol^{b>)j4&LV!< z7j?{prh&uyk)__-;-v|^#ZMWO8+9Hc4({}5&54jGW)#*uDpc;0F?)H$;U>e@?Y->! zFETSE#vQEKb?eVEIex5oxXbRlC1Z0UgFhFzXAibB%kp2=&$(3?BR$F@En z&vGKzW;K`1TKx*|I1fi~z22EY^9cnpCOO@L$kiSSsBi&G?Sf}dVAW8ShH&bLSqv6< zcz7J_Z9!?Yn^C+NcH>Ex%2w_-{##Ajvs&+ zSrb8mD}AS9o581$ki^794YpuWm(5=;m5`)KE?i)g`FsW40R`sKcCEO9fk9aFq*k&0 zjBODRMsMD{LG};o8exY;Dq(xGYvSJUEEFd5RCuF{R64}uQ96yJG?MXM#!`{Aa2E=> z2sR!cLMWP_HrfhdOSguE^=dv8MFaSPO7XiI+t^ch4SIBcmY!Fi*-)0Al-F76+js6T zpl3T0r0?Ia^Q9I>eC7+$vx0cN#I8FhzE??_Oztq*Hns`{Za@(Hz~v?Gcqgs?iqwhD z`8akc)Z~EbntF;A+;!QUR|jkgNTaf4PfSc) z_PJ-Jnb`T-%WG<4f=`q-I4EyTin9KYn}=I7lJ1h;yRm)CYD?$+W+%8vLDK=?oSU?S1(# z|IVMTHg8k0w@B^ zJ~mMw$RtYgA|Nm@Cnu+RWp;KJYFPQWdw;K)_j00iLsrU=u*p->l8BLL&t#2^rU9(~w5bRR3K|o|TX~WH>C?qlid#@!0}8M3z#H3!JqIMe z?(C|f5?nQUu9gz_G9k$Y3T(MY!$AVzzcp_q0$qr)Q7aAG+W+RjMimzYR#sp$EXofy z!!66y=kdRpbfq*kH8Djw-sar}n5hG{44mb#+up*@pFe@{@E+$Z+a7y);xyDKDw*2U zmoD|@TMpN_(;=szIjHUhQ3#VWKe^NH>ZLfVozqq(l4lv;mtYZ>6Tf~1`|epwdv@oTCPz;~FkO^x z*))wF*cQ7rT0#4rXlmQ!kVL-0nA@$_ao#QzevbE5o2J^mxO@l;-snW@L^H>C z$?HN~8I~QaRe@Da_YxG-sD8$~N~|Gnl*?eBXuF;}Te>B+e zQlH%e55i9(MDEu;r(akls#tEo7nMdgV3jI*Rj6*>V#Ph^oJfLPJerf~Zq7O*3Wu7E zNK=$lCttH#(r_qvdLEM@=)*3uCP&6K-%F5=NV{Q7Tfr#-kFFSw;9#yzab8NYOOnWg z4Ash+C7$B4eUQurF^~U~u?Q;c67uLtWlblym;>0E+H{lWcfU+;xYV$cWWKv``P13< zTX;?5cy0U0yYPno3xpx&L3SIi8?i2+pDF0V!L^w5FO}^Hk-ZYCWm%@vX)oFtJ!6UW zD2P2&ULi}Y4pI^(CXKLM$Kvlxd3P0jlfXsh!H#Q{W=a9NFKs`};~Qa-hig_$e$4i6 zl^YQhudsA@pgZv}@Kzxb8upB_H$n|)B?b_5V}wC+R9rBCE_aqZhYv&-D5uXZUKG-k z$gRIZS*7kwQbGC>u4{Y0nzQ(N^Qd_BD?6CbsrJw_?~S&+n7l%L9we#>zD4h$GBhFE zR*=>$e#-VXCD;(f-v^AixQHMir+vQjjHLl-A=f;OH}P<_PTOQ8n*$X~$>WLU{R=L- zG9S_I89hrqSM|df8sb$me03>^Q3z%+Z}^u017E@wUf4sW0atOD)@%Uu(@3SN-wg{A zkg_8#7w4;qSJk~8T7!=&L-G#h^-G?!OF;rTr@F>f_{8WQiNv@pDE|m_k^1cO;5M)D z^sx#~A5NR*@6}oMgjKF_CYhicF<%? z+leRj5qpNMtvOS%;R0(_(dz??<-)JxzF;^boVQs$k{2!fdkiH0i26z z{VVVm`u)icu54lyJ95kgRQz6Z`-_Dsh91MCp9W7aG%|W}BUYVh+u8VpyIBmCONVTB z^+ZU&=z#INcYA=iBgga+yz+^%=v7OJ7}Q5Tqim%oQR&pM#Ah!$ObjPauv+&2DKEhJ z_^)4+dBW(~A*gazzXNV~3vSrPf#5^3PDisSyu%0Kia1zG0{cP)@bIMSXV^hiq-ADQ z{f^rUR|lAj2lWfr5WEW#Af$gSlXEwe=)vCouPaajAtjUQm;XNLqIloHRp#NH3=?Wy zX}9@u+U&o5G4LqgPvcS7$)RYyWV7ul@H6a;wbBiEXAk7s_m}#`x7-)i_o7~JHs6E7 zE~A)b`}-WOtO%n9a(x4!oCNDc-<=*)O0B%y{&wuatBk&+x7x${kJOB4Q6s|e0=cJ@ zQ&@AB%g1-UPMMGm^HM&AYUfXtV5W4bpAfZw8@9s;PgjRst~gpbDGE-tvr*T`{cl57 zrSqKG#6vwqUa~p0f3bl@sd_g&YDYx=#}QU_?w^1^Zh#QQD-I9jO@L&*WGn)e(+N^v zjs=r9n_!yJ0*B?G<`V7CMmo9X_9abM8Nu7B9)pDw zS>aF(W}ytr9NKD`Zs$;LQ|i`pQ~j*j3Dy8M!}*z7JcE)LYlIP#)i*RLB)2 z+QUC)_U ztlFoV)8erI+7M3XPub>vDaBUcy8jPbcqs2>*bet^f|}}*+H;mIFOXU-zBy8xwbezE>ql`t=Uw==d+qj!tDqS3AED~4b)k=B6l)Fy;hgtdw zlt(!%Z=VjAX@9i2sl+@?4E$M8)|Yff?ko>wP>YrI736Jm5q>@7OF@TITWXKElF?rB zuOTk}`?-5igB}duf(&tiyrE4Dg-X8&Z*l-#o%Qq-*Nn$;J@- ztx`R`$b{@S7mLG|H-Zosen0-YfRB1seHCn=0C9EAqem|mjIvBV{B^O^t^DlOPBwW1 z&kix}Zwag?P^d!*6e@#?11)5c=aRn%Tk}3gHZaEEKN$fk_dUF`vY}aqCtvD(&zS{7 z^5orRi7cN*zJ;Lr(rZok7`VcYn($B+?(LUR=64{0xlpvm9P7eN-0$u&OXoWb`zvQu zbC?!q0w@YdbC^hz;>O~hRu-ikZ!`I;FAVe^7DspUAdEoG@e^(E4j$5X;j-R(YpNW-LBl^Hg^y0UN+Oh8hv)_hL=Gzp=PMOr9KLEz!IiPViJ| z>sjEf#Y?O?`;2h-jK@)53M1GYfd0rnrQDh=!t`K4tG}MnQ@5iLAP+)B5j~K(jvTIp zkn_3`FovyBqLhNQCV7*;e?#w%X{6Gr;(sdt+KwZBz5O!gAdN1ZL*l~tu0fo&UJr7v zRIG#@$ZMQ7A1*sc&mR(UT>e6jhE~wpWOMP(WVmUhULGcdO+DLgPDNRngoMPf>9c=u zFe5skY82tWp~cV2!ZJ2C#wZsh0`0#VcPczofqo)uB%z2;nG0zPL<#1k3#w2B2Vd?O|0CUP=vzP znucitR3?-`8CKa%_dpXd(s2NN(g6C0kwST@nc4yLSliBr?nisWpivk~R%BZ0v|k(y z{rC~8&*SKT8b8{jTJb|J9-dA!exR|X6FZwD1bKLQZJ`ZFDPRG$@>Fk@9_7xv0p318nEDCAv94j2e?vE`DUt; zs)MJQb^czb8|hPimimR?BUe;@L*fpx1jD#|`Epcq9WOyj^&p0R$W_3Wf)#et1(VUs? z&oH3)w+c}&9iGyLiM(kwR<^h3?d|OXT8?XUbhDyN3=B_!;~3M+dOYochyQa0&f_8} z>CDD%S{j>I)m7-TKoJsG&=KmCQB9sYp9=Bkzo2|CLBc|r-&I%d12#ZINr@NAboYZf zow3KaZ{LPCJM^w$vL3cbTnXD9{KrmZ<(u$6(Vra{Py@32Gc*= zm5Ps#zXx^XHdyr+KB0ed$Whe@G&ULjM*;-Ii!y2i$qWn4fGc>AD4~=e4RmRSX$O^* zgPsch=}a6z11#TsfZzIe9kjRK@&pD10PWI~rk>-tGWP4&FEC^0C{m029*q-4zgVgj zo5&;Uk8fB0A*3tAo(fc>-2Z*~_(X>tc64&TvZZgvcGi|WR|5LDy6vqP3L$OsB~(S` z&)a+IQ?wnVa?`*!h55u{Rck(1JtQd9OQWi*gRIk5g26&toXBoR%>L*&iuYO;oiWP|&D7V{Clh$$Oxn!1vD#srxnJitRq*ocD>g8H* zag%2hJq?izm3!kDibMT%^F*I);&wz`_b@v3kBebE6)52{O_Ea8N>L}kGA z&~Iqzji`67*8d0@Io zdlxwL+q}}2kmYlgkE4826tqIgGfJEa?h~Cob>p(WLvdz2F8**>Wmm?78G5k(g*VbL zg>)RcfLXe8A|HFrrTdAJ}QoxUSsGO9qpsa;r!Av)tzjVwwCu4 z^<Z6=`ZQt?4MDW16s4X~x{ZB;B7mba$LO;z`qh6K#B%=Ku);mK zphHU@?{6@St3$^gNcGrfyL6Xvr)l&q5k#Brjw8hu3iZ&W3U9Dn5(G zB8;A9{4Bv`Hy-0_pCHT7Zh(2AAtujHip9NTvkW=g>i}zX3)d&gpFwn z?fH}35(L0-Jfu4-@xJ8thdTZEb9#)tkDxI`)bN+$=lUK>j(*(ZL| zV*9$%D}uit#GeSz1P#|3U%&-}1#ke6EuG{z#pv1}Y&ZHGwVOsGI5rNRULe#d7eVdbNsVMN1eT;W* zcbYLBpfyS&M=uuXRsU0RiSQ?=|L3)Hm?1gwgHJ(0UE6{xsT<-)JARE5DRw0w728_G z+81L(XfLjxevfRxvNW}z^>5HC_7~bDHcrg8$JM%SVFeyncwnZ~(z~HmZiX#VR_+2m z^fHe@d_n>`;PIojmiPBMsv78YqYp~a~K~qH+0IL7dp~D2Ff*6H8YCWxC5H*ghUjeQIl6v z`nBzM4Y?nR9g$y;b}y#zPG9rq@6=H;xtT35$yk z31LDj;1C%pDZ|;b6ufmdvN)KQJQYz_cOM-9O491ke*B4XLwM&TLA^D_UG`ma z-pX`_<#`9=19K8d=iGND19$yzhhNWoc#%2xodW!Y#yqy4Up~GKcfl$1*kAA$skuy* zPlj1)6oO1wu6$Yi0h$MC(W%&4QH~>Oly|jtyVM7bljjTj@8-LU znDK+4PNGBvbha`w9}J7irT!`Tz|T@L0!f8`I6WFR=&V=V;)U2eT#wQt_)|c@>cQ4< z`Fe*mt7-;_PL7PT)P6=pgDQ|6lM7q=UuZszf4n>q4cZ&%rho_#hq(OouHAt3d|`kZ zK{)KZ!P$8? zjL(#eQ#&FoOvqtTvo)uZ=wwoHAaYNXxQ$SxeX*AOCk&xo(do%~C1vGzlH#Vu(~eq* zPl0mVkpTJmpEVs68YiYf{0!CI0_drykEeEp1qOniC>j$UsI02Gge?ZhS9a@`8|LYB zYyue>+2rKpCRp%Ldiz-#k)+O<*^K;t84gT3J=(tbpe^Rk`Sa%iXs=SSv9b=7yC2#0 zXgRcd6^G}wWM^j&4h~`nt12s@#2a&(u`YDmok;|TAWQ3v`|@R^&i@(+UEaQXw?YLS z5GCcVHEu@6uj;ArkN>Di#hWei$;rsH?YfkQ2oIiPT{-g>*)j6+S+GVZfIuXg`-YAI zEo3*VWMq`otAai1!PY9sMG6IlhihyNH$ik*DnBX%m9uUPbS|t50SJ>*QJHavQi$ga z?R8p`Yb|H>gPaVSJsXSI;_g73+i7EoUeIk7DLd7u<0Gx0uI{uxEx&XP^j>F)i8Eac=4L`)JJTGq zzX=V*`Q8Gn@et6Mx7{K3p%pJ%3{n4IMZ|ZRTK}nx9!zt|*-@AUxmPf|#wMtr1S4BO z8*AM8wfQqw)!wUgjeN27wmbLYtUxu{teWE2<(#ILHP$RJOvP)|wmQ*RUEaPn)e7}S zanqnYW__zr1oQ|QWvL;WEa`wx&~AfB4B>tq6tHAcm=sxbfNaFg zEEo)c#|TmRwzai^>PwZHPD)EM=-Sn)B@LTG5_%%A+|l_UqRX-T+S1oL>XFpl{D#qjBF~A!Eyi z{Iat;0qrw$3ya0M%<{#)3)Pm0Q8YF-E)_4qqc+h27cXBHgxIVDlG?FMEWE6Mc|SN% zLg&okGIUFWUzuXU`OTf7xI2C76g~RE{rhUrmMa~o{pI4myAZ3RkcVitKsf3;-^+D= z8A@Uv;|}^(Lsi&9NHAc{gtX6>eT5f|lIeiaaB5`Fcccx4H_J8d+_y)pI7VZAD%u?y z*P}zFE?OL_YHGdl=s+6Bkr$J!$^r3SG|vB_i=Gk_b$7W+a;x;$n?*VCd^sQTzP5vz zBX75M6H1f&G$2=o4A>(?Lqf8)GZigh{sg-A?#n+2OZ^;=s?TH4t(xJfzQg;I0#G1- z4Y$ZvW21Flm&cMoqYtFhY-Ek_CzO6dP->1=c|j*Hq!Cg3{gJ3a2UzrQdmLJ^-@bht zT56+z&b)EBw^ROq2b&t+)!EN?Rs)&j#5Q~NpoVR%uLsjYZqwA580}_~r3PYvaqB`5 zh~s-#bK6e09Ukl<89tO{Jqs4cAav+{xE2jjHvBiEud0#~tQ1er5>ot=xO3dA#u{Sr>uS+=WcJ0-Xu9Rd@x z4;x79GS3A|gdju4wwhH-LwVzI1wOIJGN`j5MtXa?6)%>B><+mssj~%xNbvW>1lFci zRA9(a4@7*86NpNbovab8jrGt6r1p=Yu^vcnoYQyj!zC+#A;7Xxi8ww3f(8&oh70D- zR-!w{Zi0$1Y(I2`onXyCo|GRfSW11k6qAy&{R?honx(c_I2C0#*Bulb{Qa^2nB`NX zkFSC-8p9cT3_<;E>_s3t1T~`>#4Cue@0g;dff#5NKN^%tDALS;K62&Qci8u$X!9hd zl~&2}cm>KL@qIJqn}Hbn3sQl1Kd z9W#|15LFoLJVXgR$9#%%Dg|v_U!jfR?c0#uNFZ5>xa~VaY6%TxMt1;d1kwiZ5g`5` z(LiP{Teogkkbdw0k{vh5HJ}Y0A0NLmUK=gyVh`+86bZzvubngdJc`vJI%#k9A+*?n z45DQC@*oI4=+TI%|M~O%pYKStIC{F%H8fIMz%*sGK^4%Llysd7)0V85h(yhtR#UK+9KbKM5VjZ<563n#9P zvfWu26UqTsfvl{mtW0Hz0sOpJyrd0`4s1@d!5Yj=l9{O*5Rj7BX9hf< zR*9n(yxRp55`+QO)Z9mOugOs$TZwJ2IZCvF=yaa(4Ti-zj!`XXzuuLS^si-RMh+jwIr+O2pxL@7P?y2GGVEtm)c znuUX72#)Xm{rfNw_cNNwtI8k1?U*-b*=hspn1PW$o#?}=e8`o*1LZPw%FBw1FjQNu zcDS%0c{JsIX!t8hUbm;wV5QOgE6QpEhEbmu;5Yme5{0;<89ECwj2OYWk-Af223?j)$)X>-e z&DW!ec-h#PuK(6gagC^Z%K#Tz8XIBsuMeDZYiW3Ra077=dbM$fpYo;wwzB=V@?8^G~_V!PoP5>g%0-pmpz8|&lCIka^J1iw9GF1dQE?nIG z5JrWNw7I@+yK-}HSt!7p4W_WvUQCRx@7@uheVZB#XoSoeeRyK1aDRaA4`=+ofBH!~IM;@6DzUFYZ5U z=S;@hY#<6?Op+N?gmXFfcyn( zEyA$&0`Mm1DTD3ME)%4`Vp+ChaFmw%?6O7i!gm-5QppB$pt`zpubsBRMH)n){f?Fh|jdbe?X69h~8hA3u<}5KFv?$w>l2 zLL`23mhZ2EmnbQlm!-P5(@iynBI9&?rrjm*C4^xXR#uYyBpgIR7Cw&saBuuQDeKSU zjb9nw%v#u*PDk8xzTmEHtMh<#wp4u1#CNm4mJTxd>&dd|5KMa8qdQ}^Lc?J8P@Oo3 z2y9PiJC434hRhBlRO-d{3lPI#$}}POv?d6Y8#%6y+I$Rt;k&xv2G$WdDc= zwjsd_sm~xo^EwEvOQO;B(3D6`LBxlWy$!9c?hupXVq+092Bdi~VN;l!YYUaI?&og_ z&!LL|&aQZI0+5K>x5qC!XPO!sFz|sMy;QR1o00;pBk({Z&;d#=1RWX~o3dJ-Nf*># z;d%;MiZIFX3u**z@B)~yd3OR&#Qh=I$o1eGbC7l+8I~T|nOgVt^#L}MfOs0^Jj*=n zb)@mTNI=`dk zCR*pf10ZJHQ&8wg%`6kL94e8barzCBR9Dt~X{b~jFfa`HAY*uk2TSh5X+DnugJ?Nm z^8j_hoUR+p41$=p%sm~>-HWrUAzK6z1uWkh{2#oVEXODVl6ysk#L7=qU0vM}4y`at z=L1RaUo*DQz$4B7i3}3Hdg=Wnto@r%Daw|b81|Wg>LZF`{zpeYJX4iJkJWNc?o8N1#;;pT% zmSy)OqR>*SuC4}vVgf@sHywd^0#FW(ub^U>nh9xC*4EZ`SPd43LK8-i;mUU@KQG9S zc>+xFdiCmU4Fd}c%k}F?fb>pCla}{_okOcxs!7KzFE%!Iv1l#>j?}V0cLqL@Y*hgB z;kGw0{C*hlFPyANS$Q^O>;jnCgEq0Y>xOcBz-~)x&p~VgzqL1jTj(G@2kxv@bW0Ps zJdJPnv%06C`2AUcfzBk>g8V22DIOJ4sz$G~vu}uezW!Cmg(EBWI^+rpvFF=wh$zR# z$HT{mI{-vAM~M!s{m%GIGxO}`^L=ZG#6Lnz0HlG3u0b++7oyAdD1rwv8yMCKVWU9~ zGz4P>54(4_SrJ=?((l#^`4rT5-v<_=G}?)K5VTYz30M_sDun*?9v>>7`btVcA!O8c zMLig9UG3h^AD#~T-EB;?L4Q~{T^7<`cQ6wT9zAS`L}jEt7;wC^nqPj94%QOOXK4*{ z<;3pWo>TJIxn3kLMhA8G@#s_zr=d^nt0uokER@SxFu!fL$mB?X;0Z(hXtsxih_wNl_qZXV#b6&j~165ew zY+4A!K~ChXA=21F#(+^%s7rxxdv`OY`$5McvqC^T0@We3IZelS)%a5H0p2)%{P7Nv?&w9^ej-U^W*FQzqi3e8h98UV~Uw-Js&<4_|0?KeWLHF}M{1 zBSe1jVhK=zP}+hE03AtvCSWM zjPBm+t9RbiW$&+d%EA|x3QT<@KZ2iBqmHT(HVY!GkBV}_p zALO z=>||q>iLPnjAjumCl|mEqq9h-e z0hIxKCDeF!P|rc+Huj|h)Jx+spH+Tzumn}~^JmYNi3A33nD_IpBzN0DT!n_kR0gnS zobEf`%?6Y}oPqd-B}(S)+qaI$5xXC`X1!eiREVYWG#4Wa4G7?dP6SdILL`ToaW{ba zl2Z%Ob8ct^n+#diQUg^0Mvb%m964{5ucC6jMZ%bz8_ur!k zKnQ|twjS*Hw3ApkOen3j^DVSMHvoBr>0uZ>S(L?rsEw#FomyElk3D zbB|ezl%>{TCp)`5w#K|Dann33H%MV<=&#r?IZ`dS@htVa7$`KEU;f;e+W+#j0f zGa0Y!@tx6 literal 0 HcmV?d00001 diff --git a/examples/descending/main.go b/examples/descending/main.go new file mode 100644 index 0000000..62ae7f7 --- /dev/null +++ b/examples/descending/main.go @@ -0,0 +1,49 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + + /* + The below will draw the same chart as the `basic` example, except with both the x and y axes turned on. + In this case, both the x and y axis ticks are generated automatically, the x and y ranges are established automatically, + the canvas "box" is adjusted to fit the space the axes occupy so as not to clip. + Additionally, it shows how you can use the "Descending" property of continuous ranges to change the ordering of + how values (including ticks) are drawn. + */ + + graph := chart.Chart{ + Height: 500, + Width: 500, + XAxis: chart.XAxis{ + /*Range: &chart.ContinuousRange{ + Descending: true, + },*/ + }, + YAxis: chart.YAxis{ + Range: &chart.ContinuousRange{ + Descending: true, + }, + }, + Series: []chart.Series{ + chart.ContinuousSeries{ + Style: chart.Style{ + StrokeColor: chart.GetDefaultColor(0).WithAlpha(64), + FillColor: chart.GetDefaultColor(0).WithAlpha(64), + }, + XValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + YValues: []float64{1.0, 2.0, 3.0, 4.0, 5.0}, + }, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + graph.Render(chart.PNG, f) +} diff --git a/examples/descending/output.png b/examples/descending/output.png new file mode 100644 index 0000000000000000000000000000000000000000..2f30474bfc4c6e9618936f8c8cd5aa9fa35778d6 GIT binary patch literal 19720 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 literal 0 HcmV?d00001 diff --git a/examples/donut_chart/main.go b/examples/donut_chart/main.go new file mode 100644 index 0000000..8b504ad --- /dev/null +++ b/examples/donut_chart/main.go @@ -0,0 +1,28 @@ +package main + +//go:generate go run main.go + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" +) + +func main() { + pie := chart.DonutChart{ + Width: 512, + Height: 512, + Values: []chart.Value{ + {Value: 5, Label: "Blue"}, + {Value: 5, Label: "Green"}, + {Value: 4, Label: "Gray"}, + {Value: 4, Label: "Orange"}, + {Value: 3, Label: "Deep Blue"}, + {Value: 3, Label: "test"}, + }, + } + + f, _ := os.Create("output.png") + defer f.Close() + pie.Render(chart.PNG, f) +} diff --git a/examples/donut_chart/output.png b/examples/donut_chart/output.png new file mode 100644 index 0000000000000000000000000000000000000000..e682501a9a47b2e151c858a6f409e5c4a569f178 GIT binary patch literal 24439 zcmeFY^;cD2^e((SGbQTA3+d=tEli&1A>sjpU4pAf4>4K zWvd{_R6_Bkw3cty(W+0NCj4IVuSb0ni^^qjCi3$JYm#RRGWyni+8qUXd+-DJ=1cXC zg0(|cX;czvIcm(-PukMO^gOSX>>sZNj5n$*e_8w~+>Jr)%xWJRmlZgbb$PZyr!tk( zA${Yw9mo>Nq=*BiJ*!nC2frX(Oz>g$?EilLpL+oB02wlC@8}Q^H~dk5Mj|XMY*5vF7EcvBFfuYS zH#ZkI{=l4>HQPaz7D@LTG-v`ZZ7Qp_D{EuhsW^GpKad92D>hfPEMbH zS{)n9Q^v}(BsE=Hs4FCn{QPO}LozC=+p}@W7Ff3t=UScR;L&13uKz(|k?sOiWE#eCVby^CN(ug)FzNfx1Pfcl587l*;BF>IP{= z{m=JC(s@?q365O}+!rKR;Us1f$>=To1f1wt~ii*MLmI27FLdy|Eccr*^(TEW5h zzd8eUM>ENZhzh3n=cq*_;Yg7 zZF?v=3E2+1aq0 z{ii-Ym&q+gV5X%e$H~b_<1Q|*ppP#Z7TY{ZUNY>fZ|{!hb_XNcTUsv1vPJbd=7?3r zUc6mu#3tvgG-xV!fiZ`W{pTx&^1|G~Epv*Lq@*zOG?SVK_`GSE1Q||WVq#*B{{ia( zbD7rb&X-MB`}_Npu@U}z>+9<$C&6bnx&4%a&MVu)shS!ZC!`RFVlQuR7EFfc&yRaABTp9kWo->?^=*KZ~%B_YU=8~g8zO0 z{(YKqad9yVPG8r<{cYS@Qg(K%ImImD!|rn$)8`x^hZt4K|}7y71^E?p8d;y}I4gl_Sg-W(`Nm!=YN~|A`0SI}I9X6m%T3hDApCnATv# z&0LjXB+lchdvT#SOA4~bkNu99nrw6YiaW<684?seMn{iw8mg&c2P;R+D&C(WW=YF5ObWXoHq%m+B&O^=n?3p=Y|Ac7HJ^<4ReY5oP6hY0;?ch~un3n? z*V9vgvobR?n^Sn#+~>wEEiJ{-N&X5B;@#NTpop-xvNEG6)?yQVLz*q(RW3y@DO;nMRO)&s+};1PN?_=o0Zdn1LV8mvP>=dF*l;G)DQ`FE!d{3cMBZKGL(X z*=cp#dXpnorp4yy;Gk1wu>I$cWZ>1`n3x#-2AlrDLDM$(qWXIGi9Bh^yT2&#hDYHR z`%^^#?Ua?2l73oQ)cG#dnqQWiueN*1C*&YddRE$rj;fW!+Cw zm1uL{9$IX$6|IH{9))X`yb%W*a;42NeK z-26#&|08Vdur75e_&5m}+0E5e42`Jw{oOT4stzzk4l>x~s?XtE6+o{=07W3kvV=WM z{P&p;W=8>1EYxm*DKPM9Jv}{RqN4-0Vg*Z0C~^A4#KclKjoV=l!Rg97hlgLCS49r0 z3zTN!NW^Gejuz^`=ow;u?t?U;ODgF+%uk>0&Vcw*&CL-HXs)O@Of?N&ygx8>>0~C0 zj;9v>2M`oH{M+819lMJoQak>idPe+-lDfLnuYW{DL>Q{D&rw9O z-{h;QHTaJZpgu|ZDJCwyoO%E5-Mc~BfRXWWt`{#7m=xQLP7V$ndM$8TR!Xc>e_8=7 zoLgJK^Q4PG(o23*VpwM(=kMPxMX%THxestyn0gGXZ4N+01&hB@ffC)rbGaGY``g>I zziu*n-B#+WBqPj?I4|#W55>jA^589Q1dtBA4_|U-X6Ai(IE_T$RkE&$-(gh?Sb@%t zj(=xo@ie0HaJ-*ZJPsJ7MH>1V8dLWTOo}_(+htniapYRhNO;mm%(%@c=D-jW6BE}e zApZ;x50}L|WnVhw?>K8VTtZL`vL&SB_4@}QPM?LPrLmDwsclC`M?qmBF)=al8&AN6 zQF%F`1Azi1jn~;K|CE^pY3kD3#Sgpe*EYUpVbWu3wwcM2p|ot zg-P)Bc71();j8!z<>DVdes~?u35$waQp_za-3(B`SJ z&Zk#aR!G@(z$W-oRFp016X$<_SkwJRRdx658uoCzrp=bTsM>k418x+&b%v#4kzl)DRc`Om5<94tAj! zZ9J1=nbytuw5sIw?)VVltmxhhFy zh#M6(1g_?2u8=rm$7jUZg79-#CKJe9bsJjMR27#C3f;Q;NXo9vqUr4H?Cgt9{<;^K7Q7zw#H93Bak00+WR?Y$-o9**!(vB}b zKOam><3e&0=CB#|?p=Fe@{%meR!ZEst*xyr1oaSrfF~s(c^UNS4>dHC=bYN?vQ|Co zaCyA^D(Jmwy_I6BXk%KwNJiC&}$>ZezW0(nS5db6NDTMIlJ z1vMHY8ylN|Kni_S(oxb!BxwyDEI6OT(urV?7<`Vb?1$}lq?+^$S z6qMniAs$}dNL;GoNjs5~MItIHcCzTQ*rl?D+{C1$7dTXs!5!Q8tqKV&Q>FdNB2%S< z$_7)V%(3m6;}lI_6vy4@z9n8Y!TuC`j3RS#uGhXaGWu?bC3IC4*%~!Wbm|gMKVJDy|QgS-oFx&T>8`xNjli`=0A&Cu>*(kV{=5gc2(kvKj4~u)!GVE+a&mGuHXsG5 zC@UZBKc@ddfG)GDP)dcVjZ$Xc4)1a zPr^FHm#oYOVK*0;+nM7S^t3t+V-dPx#)KS~Yt8%OCGT5({`|VT3&iQWySoDw8D^ZA+ik zm;3!b#v!NVp4+gYeszC!^B4R?`kl!cDWI7hnsL!v85kHWIC)=E85L>ludh#R?-*U0 zb5npFvhPXs!3usbYde;8y;m4t{3d(pG{A}{Jvw?g=mN8$EAx4<(ucCP?=u<>4y??L zRVkfai!@RryQC?d5^-Bk96Gtw#03Xli=gW=a?*RDpak^XvmvJyI3v_ zMxPVE^!;{!1&L!q0Xqi=OLKD<`_CyN+FD!1E>}F78zjl|OZkR)VsM4MCpIP33Wq$~ z)q>j9RK(9eyB0@$EPns77>@)^q_5_Q6iR!@k&&^n@$1*Gy}Z0UJrT7s2R@LzXpS1y0zYukjIaRzud zvGr+w!K+uV$?%9p|2@G9VU~s<>=*mEP4*E(OobdtOvg3aJnI`Xo)L>Lp&W>eB; zSvDGWUPaN-u%^@Q^fV>28t0jUQ)B1L#*}^bL>%p(@5vUeXruSIkS5-gF$TAmUu~3s z)BkQFrq$upxb=np$w7fsH!2e3AHi3OYi$cB-BtO>Hq*py+^}@6;&3QfR#g~?#{N_U z5%d|=yAnkl83}5SR+~MHezV6uc3DzQYtyPzWqj(mdSDs*K*1gq{B8!nIU8C3rgiFl>kLbow1})~cZ)(18C-h>?ORd&% z%v~|OyqO$;#U$Sc6eP7UDpMfu&_g}O3SNcPSFK%l)Rn7E_*&f)PsuZK>9~R%KSpPw ze1}?5kf9a%1CsU**_(RFKd=zdg?gbn2>9D_JjN$33vt_2Hng#YL~ks zi{Xqi&WD(ke`Zl>z3Xp2)hWnYC;mG>%!mhIX8kAYi-TT|5 z_#I@%P{>hud<2`ZHzi>rztD9_^&TDSTd!x#Ouj2+jd!$@-|NIfK9Ov*+V3Tu>QjH5=)H)2#n z3^j)M3ni<3{Swatrj2QQ|N4BxoIv}I8S&5KEv)k09NkK80=-~PQY6gi!m#;~*Yh6A zb-bQ2LbmjsCBcCRr>co;J?@P*>BXk8+88fsWi$O>tPmuG*c?E`oHn5{j0< zbgkmxcr{Qz9qusG1S!3PYRToRSP)9HMe*h+wo*wV;chqcvla0IlN>u&x!XyMyf>$S`hn|_XeS?>r3KA19@UACc4l%`r4R^ zb5Jw~5kLa5Gwj;r65LuPz$YO&*8)vm1M}Lou&h{6TN%GEH}N_VFYF-jdIFsfEHZeV z&wczRuUBOEl^$~XTvjFppEuAnqyc`}>wJffXssfJkvgi8Be$a?nMDH#EB}IzB|cIN zAxs*U_z;KXE}EpJ*ht1;0fpP&^<^}Un+MSO_nJuQSaBzeA5{b#QaEWjd#r!AHI&KV zo9~`ZMTEEGp@Xlt!)>=8(bT=o$EfURrU7P$@s(*x^3Ht8uSS8|1KrBxs-AZHeNV!D zVn&sR{X;pf}j#KuAV}qPlDS_;V8aPn|ePIa_ZM+W=c5c3}KxubEltr30X9bk(3womQkfVk) z*-v#(>9XWkBSY-@1`lTB&bPcaRg&8e{4}d8fs}HgF~Hl}?JJ0zkJzOZ5CxW@w4U7V zT=&SrOdGtU(qW}V6Dc>g@)2^6KMpB*qhF+&E|PO7lxGUQv$8;1COuU7&aOh!_#QRR z69Z@R>s)RDW9*rugz99B?hkwSWXodyp?vZmum!BysKxs+)nFUc_>gS6jhU@qXJ5dMkz z8%<)_)S07ag5I5;&^aM$$aaE%kqDeO?HnsDM9%h5)t;~EdF8c??7?#{=?OgKo_~D% z%UHN0W+)f&{T9|W1ugIrqiG#6&F1rKHE+F0< zn%X-R7s5;Kz9=BRpm|3(fW)N)aL1tmCT)zihrWPa>LSu|uRV~$s-0=)fMBf=Jd&&$ zEBbSTgNkG(EFa6_#qNnf`8p3CS+}W9fvXT6q{3A9#rsukUHF`jISD2dJ!y11_NDxl zF&cC(Gkc@?n`L&Io5D;O*kt}pvZSW{efuM5FT5FElBH%HH0%G%!Nqos9^wd5o3rEb z2Elhutt8^FLQ|*Gem+B=YTyoL7wJ7M2brq^2CVlAM%~;wmdYA zErpjfV;k#S(u5|=!5l?VkS27OV#JH*Ue9PlQjF#B_`koKBsDD^vNf8p6c1I~zOdf6 zUNe>Zv``U1K^B#51?=IYEHsNS7#YM8VA5rTl{41)Rtb z<)YJJym?v$q&vgl)&i}Bdi&-)4{e)>kE$R2L6<_{Z@H~!5|Is9< ziembgos<`kj!7{?eoc_l^0J!ksKVr>pq24hU6jaxHG9ON@<-O>Os86S3CZ5!JRhx$ zu^gz>CM*G*ruq>4H))XvSg5uas-}^Rr5INo+fH#^WL~5Qd{n7;`)b&$jP+pRg_8S) z8%qisrVr%SwS+GJSseq)$!EhdU4S2_SLvDMwzIlrbu}HV>{f zMFffHkxdYTE4@2)t9|O^NE|p9$o27abbYlNvRgYll4`n>|0S0gyOGzYzkL?oAOUP9 z>-(0T1L>M#?JeBQUyje^{tLa+Bh8|iehUT~@TTF2yOkoj=7{E!GscF3yx_?p>JoPs zkvvK6uV;6Hmu@tv!mFKE;@dw4qaf$`xH|X9ChlimnR~dBVR*fO&NX)DB&!`X!Xm22l-Kruh!}Z$w!OjrSh#zcb;^=Y*JV zoe``qg3QeXl+i}z`T5diS{4-GG!M>olfLuH|B*gROPpj+4&gUhSy^#w97#X5*hnMH z*^*zgBoPYK(qZ9=W~`e2n~gDz%R0F0$ZVLNR@%AsZO;@}Jy`Z^!#FQ0G5`9)aKH`E zJ1QvmroCg4;wrytCDE`qITcy{cGVt1r97nf)e*t^;FgW(I=t&LeJUW(Tvb(t*tlGS zNqX+7b(+8cec2gsNk&FyK_TF|Hvu{*Kc=UN`)Y4)ZU7}}+U}`XI0n^EiFK9qAbQ>tE6Fg~1)jXQR!y3FvL3a2CMya&9%YFLXa#j274t}u!)v7EZ zw~B7nL$R_k|5Sn97y3p+!~4KN>o;^Yynv%je(kmS{X~2FP*ihCdCkYRzQ_cN-cS3JVJEPvc<< zOo`vWe?MMsfdQ5lm{0?_&7M${=Z0Z&Jsf$}_Koe5N!91)B@R>>5(^irCtd^2eC&h1yjU_x%*LO$kD;%f*Zrix6dN1s=jWH6o?cg1 z2e@4j2%uxIySw}QHy=NLEVZyZXt4G6_EJQ|(ux}}Bz!3;p%eGlDw!V5;6DU?P;Xb) z9`2F8zQWSd(%M>XVDQOG8|ZwHA;K;wI8b>@1S#g7?==c%^)KqT7$dnd9uFS!9nUjy zP1zg?2#_0I9QPo+j4*Xp9nNoI7tI7X1~A@xqttJC_`VchxyaSaw9v!ArYze^!o|ha zDEmCP<#itnIxU-L0yhytw%{X^B~#GsZL;zwx3Hl$V((_~>jIO&eL-s^li8trCP%<&tmbczeE_+kA4^BL z$zDTLt=T0S>fKxn=F*90S~X*)GhYy@`1YB9qjJL9++sXJiQ5v=ow@%s`i%yS!=dk2 zFowZHPC0+`9iD9O0}6Jp^YRruXNb~pu{C#aL#)g0BI-$YGd`2b&8Fs3N7xr6Hyt=O zM?Us4>!)Lq@9uwl{1OcxgxAGRtLD}^+MX&X7d>6_{37$}$87OC^dR{v&Wbm%LLJ>2 zK871&v7T$#wd$jHbKQeP)Dbjr;}7kRG9e^aO?~arr)&41K=%Mptjd-CXWO|;FKdRq zQTP_e8rEBuWTVHR+pNhwyVsD7?AA5Ikos0Fz5d|*F@L)we>-pZLAg$t9Ov>Yn7HJ6 zzM1)LADIkq)j<;9+s9J{HyC7bsi;-h>z{S8hteEN9U{cqlFrvlDbgCfzaX>TDzug>Ds+x`oh#`~bg zIj^yYwlP^_G=Bmp?Uz~L?bbLPJ@ZP>hwH3FoPUWiI~x$6x)90+@qt z%}USaZK>yda5!H!bb6PqTm?8UZyYsuf8>|{=HLBl;^s1&Yp_hrS3L7HERO(MfM?xh z-^S%tZ}y@h_kN7r#e0Ou4GZPo`xtllk65vAyM?=6+UbKJm+PZ>A8O8*9Z42nS@`Q1 zi?$oSq==v$7ottv7!H}Qk?)9b2e|_>v)N;9<4_o_v|^9bRQ0liHvP|uMHeG!+1t6D zJBQL%v%v@1#WCr3wb#_Sli883Z$p2*Kklr)x-#;xd2XzTQ`L<&N{BDHdFC>sO+RoB zP3+^kxZJIn)lS;eUh;TbeP6TbKl95LNOfkN{11{y8OozMsV_0_^RB_?Ot|MT9oj+c zZiXspDMx^Q!(4ar#CO@lH4Kg{ZPL30!DSv^v>Vo93@HPflboMc9V{B~~qeeoKX-=JI87EM2X=CC)OoUu~8_1wOs&~)Qv`xJxj?O7X=+Y_Ird){)% z&Pvv%AN`LVzwT~5e10QujP_a?KcohxI5O07a4(s{O!gti-^$resw8_$S;V-P(0D_A z%4%b)wkl$anuGe9Z@BETL}>9HuiODS-q1g)n{(L4xg>@%Zus2VKO2#k)R#e6UZl@n zh(L`Zh-E5CLCRaiSWjs1FV*|E)eSR~M}8X9r9W>L)so+pR-1eiMwY(n>sa5{qr-D+ zqVXqg-p{&2OuNVC3myvO!AtP*clq8sd0Szrk-x(!M4^YvU&MbHRM$0s@xoG`GmUI` z+kGTQkbm2r$2-$th;Vk6*Qh4pTY_qS#-d_wz0KCp%f&y!Z^ds|?GXDH(U+1b3TXkz z7=19lu4Cu_2Ge+YX!G)T1ZgXQzGn5fs4<)>1g;(j!*mpr4Bc|LA zjn^M;3W%A^JsNU+QCJ?ya}2iOm15@`H$?azl`Ika;ioa8R&{$t>EA_sQbldO4&s%q zT?_alKEt1vkdvO7VCyo?%qo&CaqS@Q<~O@OAr(BhRjzLoH^_Ywa{8q`!LCA1-vUEu zj3~}mhTzmEYZd-;$y@$MKONO}l=;H-RKN+7+rc8zDaxP5`$sa^Rgx;_U+g=$g<^I; zv=i{9Q9+Taxh@XPtM{L}l3E&bRNnAX#6Cd^2GX`kt*oazH!AC`5rkDmU&eTnNCI$o zKfau-aYe8cJntKFrH;lXjQvYUJ+8SQv(vKvH0Lyv*4wtlfjK{0zmr+cQa31BK<@kI zC^4_6BDd_<5I%#|jCjeG`)gALSD~yy@)1hX7eDUM5+_pc^GC&{4xV>dm1Qnia7|um zbG-1t7yjYG&2iNwqUvp%xc9;K&IYHw0-meh$*iv#Qz|9@cU{3DOt9X`-A{Oxf)Yx< zmRq|^jB0;W;qKw>@BcH9PSvMjS1~A)^D?CCyfIlYb;lQnG&U#!EBpSkWQI`nq)IZa z?EM^F{uzo%F4K|c9Xbj(AB2~6b#}L1QCcBowwE_ibY}bU{SI+1mUS|VWxRTdbvDlx z=velpE)McNbTPg-qPsnyqvZ^pqf1WB-jZ~Kp?Z;Gf>GvR*Fja4gkGdSM*in$krs!7 zLh}EfDg0ICiE%Q<@ohJ`3@@b*U93Zm=BM(!z?2~$kn*(39vV)u|3i_j(-f{8aXyak zcWB>A|98btDe^0oj>nigP?$!ynd-HMVBvwL9iock>EDNlzZ8Ph{oe!re&Z41BmG}h zyd8pE)LO;o&*Q<(zvyEL%4^@TeSd83emT2)Dt!opiHxMFq2(e7TTAx`1Kzed;*EHejfV=B>#a^yQ(aU(fCHeX$5!IY76D#-jHs#UXR4j;uGJc>U*nNf^$OzZpJ!fnHG z-h}zwp4znSq`jF4jG#gDuMWR&EYjSFoB#(}iIlHESd4eYieB(Ft#ry~^l#ytJo~Wr zgNnPZ1OO33nIox(p=pA{}v8x6I89TgBMA zKwg3!#k^TF#s67fT)uR}tEfxOj2CP|OCt$yc+c6sGj8-W4TM#SWc4Bo1n_q$|R~g_ZnNis(QV) zdXK{Xz~3hzZrLm{t;M{}#gyU&L$y0Giex%N?|}Yje(q~mbQ*$zO4G5#j}9};=aO&P z;I^W$#rm^Uvi?=WNO#n`zpuWZQngALQsCnt)UJ-d1^`{<~QehNjSuj5NWqEyqU)Dv~P?t9nFy2AI_=6HI3(2 zS0w2x8P@)&*lfuGvO$yLN0nO3Qc{F@tfn-MP&Wk2HV3>HI+5M@LCVpE+Q%I{p%r&& zrzN+PTlTFtUN{b*Dr1(do(omO0Hjm1Rz3^2VG-rt;_wQz`H3v)f`3Mi<6u1b;=Ttp zhEYZ{J-eKz8HepQJ|pBB`<$q@wJJaNl)Jc6&uW4uq(d92s=J7#?s7x z+kx~n@($Mk7JarQROO~9WgL!}CW0Ke(~zG(_xzn0otc}TKj@L8B1t7_?k24nJuJo=*?8p`(9!KWc|K4bupOD^bm4hn zfes$TA?3mse0k^+fJY;19F=YOjF$8dH^2#RKp9I&Llch%Pa_B93aY=|2kqQHqtelx zV8sB<^Y~w8pZWPgt(+r=M|1RNE4=;Dt>F7z@p*G0FuZZxYqo?q%ldOoA{r4vCD53&_zFjE(N!5M9Cxh&TS?k+Ac#$%5N zq%GpF-LX_Aw$+>3?DjpG;HLaU(Y_Xfw7)a4?cYvD`kvE z+__FN`0hIIJmdxRwP4O+^o<~D3K7}wKPQ`@x@CFvyLHT+;v;y-84Hd1Oo~a{o+v0J z{^9&F9hS#bLMR&2IqM9s#i6e}s#HZit{2wDhkgrOEL^~ddi2sjL6pj`XPEU+7?FGK zIAqP9Aa$7_OW=b|xjpXoc<55vI6Np(8d?BK_zav!cv8m5)67CRvc~U%5_>5^Rzo=H z!N0Lyf`5Yr`7-%EN&G5JDu#SjrO< zm%7JdqqM?IgmWMV{VD1MGyok%BDaUwaX(w2^TJv$_Ei@GE+X(mTEu!s|Cx;+xP78W z3KPmC7(0_Uen<08+DtUxPP0!DA{(@*6I(I*uR%jO66WE{QPVp!@Ls3y9!08RI-j!_ zPgsd&k>mDZaGJ}vp2pl(Et)ssCARs4IL5_;s1r9OSo27;2f9pTK_pKz87=};Xb)Eq z6EZ~ZgFMZ?DXZP$Lxq#?+fhY-pKQjoqq<_CLNsZ$G@lR{&A^&jLZLvZWeqdK2|@Rty3fP|BcOO9P4@IFegyYNvM(cfVRyEa8 zybEY;)YTIrBVSorF%6^JJo-ix(hro@oP*yU+@(x=yrqC4G$G8eSavqHxk~*cAa)k_ z^!AR6jWup|S`0x#;ke=yx8_@f#TY)WglhSzW0);YXWr9#J@M|3A}m$P%kD>(D$}ag zt1Bofl4D5V(64{VK}IJTd^eFVtD>R;RGrN;U(etDw0d|Tufn+qX^?&*b{X-tyyk_IdTMF}l$1kT zs}d&Vz`UCI=zfcYy$hnjogJI7Uit)u_cG@3j{q-3W{WKz(4!pj@U>J4Ld5qYub=Nv zQ$(m_@O^MVyujIVZ*!cl9vvETc>A`WyRx?SFA(!%Vq<5D`TYYTQ!-AYR)^Vgz>oq` z4N$gaRaGiXM1YWT23!dsNWZ$IO9b5jX`ce_a}JXZy?nL62gIdp~Nq2Y*SQCH!ox&_Fwqyk+iio13BK2{n z4(2CMHtr>_0HHQ8FaQ+o(cpayHg@*IE27zzTv4BD(5nD+Ab2u9zDDw<(+9y?91gUB z*|)I?O!@E@AzG9Z&*vBWLeHK(V`OCH=l8leTBL~R9~iKpu$e2)RIiu?Legvnrq{~K zU;bIHw7L~Ps4QQ?;WQF~zVh+|7st!DQxARNqL7lKW*OGIkU09~{LoNNO4rAKxmGM- z-=609BKOq-MSqrv*T<{1$b{zR+w2NIpgRX|eN0TKmBT?iGo0L$$gZMh3Aq(;A@$sv zUXs+3Br+K;Yk_X7Pw7TZ3_3M>rBB^L$yRG?E6~>F2zvn4C%-9>*aFfW2p6ZOr`@RO z1f29zC5dQgj(`951lqRUoB&P^j-$UDeKU)(fKi)~`qpSa4c@E({g4Qtt3TZS9!Lus zs!eR4$Kr@)v_qEH@j~#F_mJy<=eih&*xK9#H=qAtjQ6}o z1WLdFSqK7CxqEw7*Ay2Iuh^E8R>!Rs>Bcl@$zCa);K9>D{%(6DMv;@NG1&(7b{mh#pjSZn+saSd3 z=u(kn{RolEkYrZ)MYl&M{DnDANXo$EM#>3Ha`q+@yiWs&*011&f!{xq#Krt2A7g`g zAs@%xoDJgnQ*NuZ|HHszV2}BL7+MubHg5d)_8_kt8Wg-F~ z^L>20hHF0b1tjuc5uFO1l~8)n{tuI2W)B88b!`?z50JscE86ghJmZLtVag2*n4O)C;p5hgGJ%I zAp7C&Ar~l`+k<)`?ZjV`7vx0Z6{H1x@)FMG3@9j7*Qj{TPF=Ux2u}Gnn^Hc+egoAK z@&+10I}5(_sRsA|E(vDjJw$SHV>(G@neF;7eK8rAH%9i5e!y38rB3Cs#D5`=3Z?cD zibjD0NG_YhfrE7{$jk*co%u#s#8UQ8c3g#U^w0)ALm}yTjjubA1d%Ym2>t+RvxNfe zqdX|Y9J={p{aek}54qw+!tccl{~7It=j2GJAwi+(dFSelW&f0hfFT^Zl)sYyt)|rvL$e#n zsyhl^+xM(U>$}?@KtlF8av}nLL6*3m{usU`0c0Vz?~x_Wktf+|S}RK{!O`NPMsHH5 zz)sdUT>Oj(i-HH^vounO`2ysE504mI8GryOXxfw+nneOD%|dukxiSS1U@MTu9C3roJZVN~n`t?8Y!%YZ5BA6lLd9 zAotMXh5%$qdi~vF>uLOB+PHQCc_D3m_OMRf{oTPdLNgn*kivyt^`pFyvons+;SJ?% zA)ABmbz;@mIr@)>3}B&2#HrHVaysf7g35PQSrtMN* z4kv^B;Zt7l%GVfk$6|3Wq^O3O3SwH_v`LRG=)U!xBXTAWGoQyyL#VbjHaq_%Q zA&r~aM&`Hc-3jXyQv|{!_bj)=(k53`l0%Glz&@k~nlm|1Ua}KWL&oN){H{7uS*;X- z2F0LUQfKyOh;h0P{63XIT01JrYQ9P3A$Dx6%7(qRp6N^u@SHF0-lEW)o0$mxUb`Az z^g0a5>xnXw4|FjytH?(5Xq{sDgo=o=(N#XHBr|&PY!rPoqr-BSD*De^!~S#auWZvf z)Z7s}l*fyIw)weF*Br90#4g|Dx*t(BAVYn%X0YzcI|k6^N1?4A!?t~cg^$Y<@JoSc zc{r(?<9KdN((v_Iyw?Rjd0(uqi;<&~gt|UBb)i50-k~W=K@NqY+_ z(KCVJ!2GMlfdcKeZpYZw)ek1BY4^!)>m@%1gHT;*WyiJ3_`YH*{TJk6qAE@e0XR4z zQXs@QsRsvN;bqd0PhVqhYc$;zRerb7j*owMJJBSbS@&n~N0CNck9+b`n?T`d#R@|w z)=rSYEIlUlb@ycRh{MatIb6|eM+W(hY&2`iuRtqP@d0*S5;wbhelt{5UQEt|7bxnE zmD}G6bLo^aTWIlPcCP{wyOB+1qSt;q6_m%c#IPqAk*F-Dqu`{5>y{$InRY+%b=WoTCSGCkRyvQu8%(4jfrv zB_41UeGcnh(KvOuaCz<@oh=5pmECw?7wQyn$|&NrgDK$L*41*fbqyk%^8V06X$&0C zLc+ID6@g5yuGCz1r(f0EoiF!Vtx&TgB}k}n_TQQ6g^uajy093zQ17O0GYV?NG3T>R z21glVOyWA%K>D*{=mj72Ql=N8<6_A*7wsAJI2~b?MhP6vnI{^Ej~=_%P}#!zW2nT{ zOwm*!yJZ%t_lhO)jza^0JQLw3P(wp(_xqkLm#tF$3MCwHv!GS)6**V|+u49bM zXzF5$V4kzC9+gy_=-yh$8EO=%+ARDl%*~?wBJuZpTfe@$-rsQLw9g+9k|Vewy-$!} z+(&mZ0+}>aH2gstjUnT_0j!$(ml|{V{#8>B{dbdU6RtsjcKgVBt0&RlE#w$}p2sQd zdWP$6Vex?PfkJN=!j(HXyPsa)KQtkok6k?2{#7Vle9cO&YD_qTgR3D}ao(_k?(0q8 z#Rlw*T*UBU_3g`sHxF-36w8S4{9b(+v_TX7sID7|E{hT}Y7vf#WA<%s!sMhH+xEMc z$-ND|is@&QCH0(`((25i*-@D4gZXl;T;Z3ULPF(FPh1u?)rtiu)ycnk=Eo7?jZF}; zMxaAYls#Q2QcMIRA2SJf{h2DJ;%y8V7%e+60oYMKVDVssvnk=i0;oI;1_%1T@d!8BeGLr_DVy? zBHbXav@w8km-=t-C;eZ6w{+1-YX=vsVa{~RJ?3>1l!7unHiew1xI4d)6qq+ZLEQyB z0iq6;W}hAk9=l28oY;)B$F?_JKYjD_AK@$ zG0=P;g9lQxJU*3$D$@D^hcUOf_tko+&3LAQyY663W^puSb~xAd^k zCv`fu&n#Fm*1>u7zncw*!q=jgG}6X$TxeJRTsi#AJ@d;)ez89Rr!^8v8L;rz`Tfl9 zn)D0etlKqKJkqxZ2xij$M-)d*#t%67G{5ZKa0pNsihb zP^IM+TRHMWX2hSdx@-B1&wjLLMk8q8c<+XopL~O2f|EnS43{;2(?Y_&G&Va_Eg-;q zH=P_y>?X7^rtv?`8&Tl;U>$5AV`+~ zYM0tmf*6z+#aP(MNA`cGkj!sf`nFV~Onn}i*6Cg9?bHPH{|z{Rga3yMiQD2w&-Jv0 zv1pK!{X~VyxUhRs8?w5wP9g)BQbKCmSw9x7?2ext4p}ChNyO_;`GBtGjrvM;%lGEL zf-U(Pb|2Kh35ZegU-sy7@>>B!@8TdxhcT_8()S=8Do&>)Vz23bVJOEg;;y?j8jo7c z*(lwKVZ(`7vFW$g*OZ`MpIsCB*Gd;hV;(J-IERMhIvq+3%jpgz^&&MUj((4&X~FUm zZ}88r>i6GkE$deve$%#u)6funa|^6Yf@K-*DU`XiE`-Gz+P^mSw>

    !0)EGIPVf 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 Vm;>Wv5u85s_`y@<5=CV2e*vo_W7+@! literal 0 HcmV?d00001 diff --git a/examples/donut_chart/reg.svg b/examples/donut_chart/reg.svg new file mode 100644 index 0000000..f14c2af --- /dev/null +++ b/examples/donut_chart/reg.svg @@ -0,0 +1,25 @@ +\nBlueTwoOne \ No newline at end of file diff --git a/examples/horizontal_stacked_bar/main.go b/examples/horizontal_stacked_bar/main.go new file mode 100644 index 0000000..f078d09 --- /dev/null +++ b/examples/horizontal_stacked_bar/main.go @@ -0,0 +1,222 @@ +package main + +import ( + "os" + + "github.com/wcharczuk/go-chart/v2" + "github.com/wcharczuk/go-chart/v2/drawing" +) + +func main() { + chart.DefaultBackgroundColor = chart.ColorTransparent + chart.DefaultCanvasColor = chart.ColorTransparent + + barWidth := 80 + + var ( + colorWhite = drawing.Color{R: 241, G: 241, B: 241, A: 255} + colorMariner = drawing.Color{R: 60, G: 100, B: 148, A: 255} + colorLightSteelBlue = drawing.Color{R: 182, G: 195, B: 220, A: 255} + colorPoloBlue = drawing.Color{R: 126, G: 155, B: 200, A: 255} + colorSteelBlue = drawing.Color{R: 73, G: 120, B: 177, A: 255} + ) + + stackedBarChart := chart.StackedBarChart{ + Title: "Quarterly Sales", + TitleStyle: chart.Shown(), + Background: chart.Style{ + Padding: chart.Box{ + Top: 75, + }, + }, + Width: 800, + Height: 600, + XAxis: chart.Shown(), + YAxis: chart.Shown(), + BarSpacing: 40, + IsHorizontal: true, + Bars: []chart.StackedBar{ + { + Name: "Q1", + Width: barWidth, + Values: []chart.Value{ + { + Label: "32K", + Value: 32, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorMariner, + FontColor: colorWhite, + }, + }, + { + Label: "46K", + Value: 46, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorLightSteelBlue, + FontColor: colorWhite, + }, + }, + { + Label: "48K", + Value: 48, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorPoloBlue, + FontColor: colorWhite, + }, + }, + { + Label: "42K", + Value: 42, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorSteelBlue, + FontColor: colorWhite, + }, + }, + }, + }, + { + Name: "Q2", + Width: barWidth, + Values: []chart.Value{ + { + Label: "45K", + Value: 45, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorMariner, + FontColor: colorWhite, + }, + }, + { + Label: "60K", + Value: 60, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorLightSteelBlue, + FontColor: colorWhite, + }, + }, + { + Label: "62K", + Value: 62, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorPoloBlue, + FontColor: colorWhite, + }, + }, + { + Label: "53K", + Value: 53, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorSteelBlue, + FontColor: colorWhite, + }, + }, + }, + }, + { + Name: "Q3", + Width: barWidth, + Values: []chart.Value{ + { + Label: "54K", + Value: 54, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorMariner, + FontColor: colorWhite, + }, + }, + { + Label: "58K", + Value: 58, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorLightSteelBlue, + FontColor: colorWhite, + }, + }, + { + Label: "55K", + Value: 55, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorPoloBlue, + FontColor: colorWhite, + }, + }, + { + Label: "47K", + Value: 47, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorSteelBlue, + FontColor: colorWhite, + }, + }, + }, + }, + { + Name: "Q4", + Width: barWidth, + Values: []chart.Value{ + { + Label: "46K", + Value: 46, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorMariner, + FontColor: colorWhite, + }, + }, + { + Label: "70K", + Value: 70, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorLightSteelBlue, + FontColor: colorWhite, + }, + }, + { + Label: "74K", + Value: 74, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorPoloBlue, + FontColor: colorWhite, + }, + }, + { + Label: "60K", + Value: 60, + Style: chart.Style{ + StrokeWidth: .01, + FillColor: colorSteelBlue, + FontColor: colorWhite, + }, + }, + }, + }, + }, + } + + pngFile, err := os.Create("output.png") + if err != nil { + panic(err) + } + + if err := stackedBarChart.Render(chart.PNG, pngFile); err != nil { + panic(err) + } + + if err := pngFile.Close(); err != nil { + panic(err) + } +} diff --git a/examples/horizontal_stacked_bar/output.png b/examples/horizontal_stacked_bar/output.png new file mode 100644 index 0000000000000000000000000000000000000000..d8ad1232e9d195d834324257a3ad8d8cc0117be7 GIT binary patch literal 34357 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