Skip to content

Commit 3c171a1

Browse files
Added bar chart example
1 parent 6ee1bd4 commit 3c171a1

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package demo.components
2+
3+
import scala.scalajs.js
4+
import japgolly.scalajs.react._
5+
import japgolly.scalajs.react.vdom.all.key
6+
import japgolly.scalajs.react.vdom.svg.all._
7+
import paths.high.Bar
8+
9+
import demo.colors._
10+
11+
12+
object bar {
13+
case class Stats(values: List[List[Double]], labels: List[String])
14+
private val palette = mix(Color(130, 140, 210), Color(180, 205, 150))
15+
private def below(p: js.Array[Double]) = s"translate(${ p(0) }, 320)"
16+
17+
val BarChart = ReactComponentB[Stats]("Bar chart")
18+
.render(stats => {
19+
val bar = Bar[Double](
20+
data = stats.values,
21+
accessor = identity,
22+
width = 380,
23+
height = 300,
24+
gutter = 10
25+
)
26+
val groups = stats.values.length
27+
val middle = groups / 2
28+
val count = stats.values.head.length
29+
30+
val rectangles = bar.curves.zipWithIndex map { case (curve, i) =>
31+
if (curve.index == middle) g(
32+
path(d := curve.line.path.print, stroke := "none", fill := string(palette(curve.index))),
33+
text(transform := below(curve.line.centroid), textAnchor := "middle", stats.labels(i / count))
34+
)
35+
else path(d := curve.line.path.print, stroke := "none", fill := string(palette(curve.index)))
36+
}
37+
38+
svg(width := 460, height := 400,
39+
g(transform := "translate(80,50)", rectangles)
40+
)
41+
})
42+
.build
43+
}

src/main/scala/demo/components/toplevel.scala

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import logo._
88
import piechart._
99
import radar._
1010
import tree._
11+
import bar._
1112

1213

1314
object toplevel {
@@ -42,6 +43,14 @@ object toplevel {
4243
))
4344
))
4445
))
46+
val stats = Stats(
47+
values = List(
48+
List(1, 2.0, 3, 4),
49+
List(2, 3.0, 1, 4),
50+
List(2, 2.5, 3, 3)
51+
),
52+
labels = List("2009", "2010", "2011", "2012")
53+
)
4554

4655
val TopLevel = ReactComponentB[Unit]("Top level component")
4756
.render(_ =>
@@ -64,7 +73,12 @@ object toplevel {
6473
id = Some("tree"),
6574
title = "Tree Chart",
6675
text = "Here is part of the duck family tree."
67-
), TreeChart(tree))
76+
), TreeChart(tree)),
77+
Panel(PanelContent(
78+
id = Some("bar"),
79+
title = "Bar Chart",
80+
text = "Here is a bar chart example."
81+
), BarChart(stats))
6882
)
6983
)
7084
)

src/main/scala/demo/components/tree.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ object tree {
1414
private def move(p: js.Array[Double]) = s"translate(${ p(0) },${ p(1) })"
1515
private def isLeaf(duck: Duck) = duck.descendants.length == 0
1616

17-
val TreeChart = ReactComponentB[Duck]("Pie chart")
17+
val TreeChart = ReactComponentB[Duck]("Tree chart")
1818
.render(ducks => {
1919
val tree = Tree[Duck](
2020
data = ducks,

0 commit comments

Comments
 (0)