Skip to content
commit-766c8d6756a1

Interactive bar

Categorical comparisons with grouped, stacked, horizontal, labeled, referenced, and zoomable treatments.

Purpose
Compare magnitudes across a small ordered or unordered category set.
Use when
People need direct category comparisons, optional grouping or stacking, and hover exploration.
Avoid when
Too many categories, too many stacks, or precise lookup dominates; use a table or another summary.
Equivalent data
Every example includes a keyboard-readable exact-value table; labels and references never rely on color alone.
Exact category values
CategorySeriesValue
MonCategory A60
MonCategory B9
TueCategory A251
TueCategory B43
WedCategory A113
WedCategory B58
ThuCategory A136
ThuCategory B150
FriCategory A134
FriCategory B74
SatCategory A205
SatCategory B126
SunCategory A229
SunCategory B183

7 categories across 2 series.

Usage Example
import (
  "github.com/araihu/goshtoso-charts/components/chart"
  interactivebar "github.com/araihu/goshtoso-charts/components/interactive/bar"
)

@interactivebar.Bar(interactivebar.Config{
  Label: "Basic bar example",
  XAxis: []string{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"},
  Series: []interactivebar.Series{
    {Name: "Category A", Data: categoryA},
    {Name: "Category B", Data: categoryB},
  },
  Options: chart.ChartOptions{
    Title: &chart.TitleOptions{Text: "basic bar example", Subtitle: "This is the subtitle."},
    Tooltip: &chart.TooltipOptions{Show: chart.Bool(true), Trigger: "axis"},
  },
})

Labels

Visible labels repeat exact values directly on the marks while the disclosure table remains the complete reading path.

Exact category values
CategorySeriesValue
MonCategory A200
MonCategory B69
TueCategory A247
TueCategory B159
WedCategory A255
WedCategory B88
ThuCategory A125
ThuCategory B95
FriCategory A166
FriCategory B100
SatCategory A40
SatCategory B250
SunCategory A70
SunCategory B43

7 categories across 2 series.

Labels
SeriesOptions: chart.SeriesOptions{Label: &chart.LabelOptions{Show: chart.Bool(true), Position: "top"}}

Axes and units

Named axes, literal unit suffixes, and split lines add reading context without accepting executable formatter code.

Exact category values
CategorySeriesValue
MonCategory A236
MonCategory B74
TueCategory A159
TueCategory B115
WedCategory A52
WedCategory B205
ThuCategory A40
ThuCategory B253
FriCategory A29
FriCategory B45
SatCategory A172
SatCategory B181
SunCategory A82
SunCategory B76

7 categories across 2 series.

Axes and units
Options: chart.ChartOptions{
  XAxis: &chart.AxisOptions{Name: "XAxisName", LabelSuffix: " x-unit", ShowSplitLine: chart.Bool(true)},
  YAxis: &chart.AxisOptions{Name: "YAxisName", LabelSuffix: " y-unit", ShowSplitLine: chart.Bool(true)},
}

Explicit colors

Caller-selected colors override theme series tokens when a fixed visual identity is required.

Exact category values
CategorySeriesValue
MonCategory A12
MonCategory B5
TueCategory A7
TueCategory B287
WedCategory A125
WedCategory B68
ThuCategory A88
ThuCategory B150
FriCategory A145
FriCategory B223
SatCategory A80
SatCategory B145
SunCategory A215
SunCategory B57

7 categories across 2 series.

Explicit colors
Style: charttheme.Style{Colors: []string{"#2563eb", "#db2777"}}

Series arrangement

Widths, gaps, horizontal orientation, and stacking are typed treatments on the same Bar component.

Exact category values
CategorySeriesValue
MonCategory A246
MonCategory B264
TueCategory A47
TueCategory B215
WedCategory A112
WedCategory B180
ThuCategory A66
ThuCategory B276
FriCategory A64
FriCategory B115
SatCategory A40
SatCategory B61
SunCategory A99
SunCategory B78

7 categories across 2 series.

Exact category values
CategorySeriesValue
MonCategory A30
MonCategory B291
TueCategory A196
TueCategory B103
WedCategory A81
WedCategory B6
ThuCategory A215
ThuCategory B21
FriCategory A228
FriCategory B205
SatCategory A75
SatCategory B136
SunCategory A128
SunCategory B234

7 categories across 2 series.

Exact category values
CategorySeriesValue
MonCategory A23
MonCategory B20
TueCategory A212
TueCategory B186
WedCategory A227
WedCategory B180
ThuCategory A92
ThuCategory B150
FriCategory A279
FriCategory B254
SatCategory A82
SatCategory B140
SunCategory A212
SunCategory B27

7 categories across 2 series.

Series arrangement
Orientation: interactivebar.OrientationHorizontal,
SeriesOptions: chart.SeriesOptions{Stack: "stackA", BarGap: "150%"},
Series: []interactivebar.Series{
  {Name: "Category A", Data: categoryA, Options: chart.SeriesOptions{BarWidth: "35"}},
  {Name: "Category B", Data: categoryB, Options: chart.SeriesOptions{BarWidth: "15%"}},
}

Category zoom

Inside gestures and a visible slider expose the same bounded category window; exact values remain available outside the canvas.

Exact category values
CategorySeriesValue
MonCategory A230
MonCategory B248
TueCategory A19
TueCategory B225
WedCategory A13
WedCategory B166
ThuCategory A54
ThuCategory B284
FriCategory A130
FriCategory B29
SatCategory A18
SatCategory B235
SunCategory A289
SunCategory B207

7 categories across 2 series.

Exact category values
CategorySeriesValue
MonCategory A230
MonCategory B248
TueCategory A19
TueCategory B225
WedCategory A13
WedCategory B166
ThuCategory A54
ThuCategory B284
FriCategory A130
FriCategory B29
SatCategory A18
SatCategory B235
SunCategory A289
SunCategory B207

7 categories across 2 series.

Category zoom
Zoom: &interactivebar.Zoom{
  Mode: interactivebar.ZoomSlider,
  StartPercent: 10,
  EndPercent: 50,
}

Calculated and explicit references

Named points and guide lines add context while the adjacent table preserves every source value.

Exact category values
CategorySeriesValue
MonCategory A100
MonCategory B190
TueCategory A159
TueCategory B193
WedCategory A28
WedCategory B236
ThuCategory A72
ThuCategory B213
FriCategory A1
FriCategory B253
SatCategory A242
SatCategory B114
SunCategory A22
SunCategory B48

7 categories across 2 series.

Exact category values
CategorySeriesValue
MonCategory A225
MonCategory B94
TueCategory A272
TueCategory B161
WedCategory A85
WedCategory B46
ThuCategory A290
ThuCategory B223
FriCategory A123
FriCategory B79
SatCategory A237
SatCategory B238
SunCategory A279
SunCategory B276

7 categories across 2 series.

Calculated and explicit references
References: interactivebar.References{
  Points: []interactivebar.PointReference{
    {Name: "Maximum", Statistic: interactivebar.StatisticMaximum},
    {Name: "special mark", Coordinate: &interactivebar.Coordinate{Category: "Mon", Value: 100}},
  },
  Lines: []interactivebar.GuideReference{{Name: "Average", Statistic: interactivebar.StatisticAverage}},
  ShowLabels: chart.Bool(true),
}

Large canvas

A taller chart preserves the upstream large-canvas intent while responsive width keeps page layout consumer-owned.

Exact category values
CategorySeriesValue
MonCategory A60
MonCategory B90
TueCategory A260
TueCategory B94
WedCategory A20
WedCategory B49
ThuCategory A106
ThuCategory B96
FriCategory A268
FriCategory B169
SatCategory A105
SatCategory B166
SunCategory A43
SunCategory B285

7 categories across 2 series.

Large canvas
Width: "100%", Height: "600px"

Shared chart behavior

Use the chart controls guide covering expand, fullscreen, and PNG export behavior. The chart modes guide explains interactive canvas, runtime, and print tradeoffs.

Mixed-series composition

The upstream Bar, Line, and Scatter overlay needs a separate renderer-neutral composite chart API. Bar does not accept backing-renderer series or raw option escape hatches.

Go API

v0.0.1

The examples above cover behavior and composition. pkg.go.dev is the canonical reference for exported types, functions, methods, and Go documentation.

github.com/araihu/goshtoso-charts/components/interactive/bar

Enabled, disabled, hidden, and omitted wrapper behavior, controls, export, and client transitions are shared by every chart. Review chart controls, then compare static/vector and interactive capabilities.

Open v0.0.1 API