bar-grouped.html 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <html>
  2. <head>
  3. <title>Grouped Bar Chart</title>
  4. <script type="text/javascript" src="../protovis-d3.1.js"></script>
  5. </head>
  6. <body>
  7. <script type="text/javascript+protovis">
  8. var n = 3,
  9. m = 4,
  10. data = pv.range(n).map(function() pv.range(m).map(Math.random)),
  11. w = 400,
  12. h = 250,
  13. x = pv.Scale.linear(0, 1).range(0, w),
  14. y = pv.Scale.ordinal(pv.range(n)).splitBanded(0, h, 4/5);
  15. var vis = new pv.Panel()
  16. .width(w)
  17. .height(h)
  18. .bottom(20)
  19. .left(20)
  20. .right(10)
  21. .top(5);
  22. var bar = vis.add(pv.Panel)
  23. .data(data)
  24. .top(function() y(this.index))
  25. .add(pv.Bar)
  26. .data(function(a) a)
  27. .top(function() this.index * y.range().band / m)
  28. .height(y.range().band / m)
  29. .left(0)
  30. .width(x)
  31. .fillStyle(pv.Colors.category20().by(pv.index));
  32. bar.anchor("right").add(pv.Label)
  33. .textStyle("white")
  34. .text(function(d) d.toFixed(1));
  35. vis.add(pv.Label)
  36. .data(pv.range(n))
  37. .left(0)
  38. .top(function() y(this.index) + y.range().band / 2)
  39. .textMargin(5)
  40. .textAlign("right")
  41. .text(function() "ABCDEFGHIJK".charAt(this.index));
  42. vis.add(pv.Rule)
  43. .data(x.ticks())
  44. .left(function(d) Math.round(x(d)) - .5)
  45. .strokeStyle(function(d) d ? "rgba(255,255,255,.3)" : "#000")
  46. .add(pv.Rule)
  47. .bottom(0)
  48. .height(5)
  49. .strokeStyle("#000")
  50. .anchor("bottom").add(pv.Label)
  51. .text(function(d) d.toFixed(1));
  52. vis.render();
  53. </script>
  54. </body>
  55. </html>