【问题标题】:Bar chart in Javascript: stacked bars + grouped barsJavascript 中的条形图:堆积条形图 + 分组条形图
【发布时间】:2011-02-18 15:35:55
【问题描述】:

我正在寻找一种 Javascript 解决方案,将分组条形图和堆叠条形图与漂亮的图形混合在一起,例如 Protovis 提供的图形。

例如,如果我想比较 Apple (iPads+iPhones) 设备和 Android 设备上的下载量,我可能有(请原谅我糟糕的 ascii 艺术)

60k | ^ 50k | #^^ 40k |# # ^ #^ 30k |@ #^ ^ #^ 20k |@^ #^ #^ @^ 10k |@^ @^ @^ @^ ================== 一月 二月 三月 四月 传奇 #: iPad 下载 @:iPhone 下载 ^: 安卓下载

【问题讨论】:

  • 嘿@ewalk 你能找到那个 Stacked+Grouped 条形图的解决方案吗?

标签: charts javascript


【解决方案1】:

结帐Google Chart ToolsGoogle Visualization

例如,您可以指定以下内容:

cht=bvs
chco=4D89F9,C6D9FD
chd=t:10,50,60,80,40|
  50,60,100,40,20
chds=0,160

假设您将 chd 更改为

cht=bvs
chs=250x150
chco=4D89F9,C6D9FD
chd=t:0,50,0,80,0, 10, 50, 40
      60,0,100,0,20, 50, 100, 60
chds=0,160

看看上面的图表(好像它是一个组图,但实际上它是堆叠的)。然后,您可以在创建堆叠的“外观”组之后附加数据。

【讨论】:

    【解决方案2】:

    嘿,我刚刚在 d3.js 上开发了分组+堆叠条形图。

    【讨论】:

      【解决方案3】:

      由于还没有人提到C3.js,所以这里有一个堆叠+分组的演示 (source)

      var chart = c3.generate({
          bindto: "#chart",
          data: {
              columns: [
                  ['data1', -30, 200, 200, 400, -150, 250],
                  ['data2', 130, 100, -100, 200, -150, 50],
                  ['data3', -230, 200, 200, -300, 250, 250]
              ],
              type: 'bar',
              groups: [
                  ['data1', 'data2']
              ]
          },
          grid: {
              y: {
                  lines: [{value:0}]
              }
          }
      });
      
      setTimeout(function () {
          chart.groups([['data1', 'data2', 'data3']])
      }, 1000);
      
      setTimeout(function () {
          chart.load({
              columns: [['data4', 100, -50, 150, 200, -300, -100]]
          });
      }, 2000);
      
      setTimeout(function () {
          chart.groups([['data1', 'data2', 'data3', 'data4']])
      }, 3000);
      /*-- Chart --*/
      /*-- From https://github.com/masayuki0812/c3/blob/0.4.10/c3.css --*/
      /*-- Chart --*/
      .c3 svg {
        font: 10px sans-serif; }
      
      .c3 path, .c3 line {
        fill: none;
        stroke: #000; }
      
      .c3 text {
        -webkit-user-select: none;
        -moz-user-select: none;
        user-select: none; }
      
      .c3-legend-item-tile, .c3-xgrid-focus, .c3-ygrid, .c3-event-rect, .c3-bars path {
        shape-rendering: crispEdges; }
      
      .c3-chart-arc path {
        stroke: #fff; }
      
      .c3-chart-arc text {
        fill: #fff;
        font-size: 13px; }
      
      /*-- Axis --*/
      /*-- Grid --*/
      .c3-grid line {
        stroke: #aaa; }
      
      .c3-grid text {
        fill: #aaa; }
      
      .c3-xgrid, .c3-ygrid {
        stroke-dasharray: 3 3; }
      
      /*-- Text on Chart --*/
      .c3-text.c3-empty {
        fill: #808080;
        font-size: 2em; }
      
      /*-- Line --*/
      .c3-line {
        stroke-width: 1px; }
      
      /*-- Point --*/
      .c3-circle._expanded_ {
        stroke-width: 1px;
        stroke: white; }
      
      .c3-selected-circle {
        fill: white;
        stroke-width: 2px; }
      
      /*-- Bar --*/
      .c3-bar {
        stroke-width: 0; }
      
      .c3-bar._expanded_ {
        fill-opacity: 0.75; }
      
      /*-- Focus --*/
      .c3-target.c3-focused {
        opacity: 1; }
      
      .c3-target.c3-focused path.c3-line, .c3-target.c3-focused path.c3-step {
        stroke-width: 2px; }
      
      .c3-target.c3-defocused {
        opacity: 0.3 !important; }
      
      /*-- Region --*/
      .c3-region {
        fill: steelblue;
        fill-opacity: 0.1; }
      
      /*-- Brush --*/
      .c3-brush .extent {
        fill-opacity: 0.1; }
      
      /*-- Select - Drag --*/
      /*-- Legend --*/
      .c3-legend-item {
        font-size: 12px; }
      
      .c3-legend-item-hidden {
        opacity: 0.15; }
      
      .c3-legend-background {
        opacity: 0.75;
        fill: white;
        stroke: lightgray;
        stroke-width: 1; }
      
      /*-- Tooltip --*/
      .c3-tooltip-container {
        z-index: 10; }
      
      .c3-tooltip {
        border-collapse: collapse;
        border-spacing: 0;
        background-color: #fff;
        empty-cells: show;
        -webkit-box-shadow: 7px 7px 12px -9px #777777;
        -moz-box-shadow: 7px 7px 12px -9px #777777;
        box-shadow: 7px 7px 12px -9px #777777;
        opacity: 0.9; }
      
      .c3-tooltip tr {
        border: 1px solid #CCC; }
      
      .c3-tooltip th {
        background-color: #aaa;
        font-size: 14px;
        padding: 2px 5px;
        text-align: left;
        color: #FFF; }
      
      .c3-tooltip td {
        font-size: 13px;
        padding: 3px 6px;
        background-color: #fff;
        border-left: 1px dotted #999; }
      
      .c3-tooltip td > span {
        display: inline-block;
        width: 10px;
        height: 10px;
        margin-right: 6px; }
      
      .c3-tooltip td.value {
        text-align: right; }
      
      /*-- Area --*/
      .c3-area {
        stroke-width: 0;
        opacity: 0.2; }
      
      /*-- Arc --*/
      .c3-chart-arcs-title {
        dominant-baseline: middle;
        font-size: 1.3em; }
      
      .c3-chart-arcs .c3-chart-arcs-background {
        fill: #e0e0e0;
        stroke: none; }
      
      .c3-chart-arcs .c3-chart-arcs-gauge-unit {
        fill: #000;
        font-size: 16px; }
      
      .c3-chart-arcs .c3-chart-arcs-gauge-max {
        fill: #777; }
      
      .c3-chart-arcs .c3-chart-arcs-gauge-min {
        fill: #777; }
      
      .c3-chart-arc .c3-gauge-value {
        fill: #000;
        /*  font-size: 28px !important;*/ }
      <!-- link href="https://raw.githubusercontent.com/masayuki0812/c3/0.4.10/c3.min.css" rel="stylesheet"/-->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>
      <script src="https://raw.githubusercontent.com/masayuki0812/c3/0.4.10/c3.min.js"></script>
      
      <div id="chart"></div>

      【讨论】:

        【解决方案4】:

        另请参阅 Dojo 工具包的 Dojox 图表 API:Dojox charting

        【讨论】:

        • 这看起来像一个强大的图表工具,但你可以创建集群(我之前使用术语组)或堆栈,但据我所知,不能同时使用。
        • 从链接中,我看到:酒吧:酒吧 - 单杠。 ClusteredBars - 带有聚集数据集的水平条。使用酒吧。 StackedBars - 带有水平条的堆叠数据集。使用酒吧。