如何在Excel中创建具有不同Axis值的柱形图

时间:2018-02-09 00:00:57

标签: excel charts

我想在Excel中创建以下图表。 Y值不同:97%,51h,1292票。 如何在不让它看起来丑陋的情况下做到这一点? enter image description here

1 个答案:

答案 0 :(得分:3)

可以使用Javascript在Excel中执行此操作,这种语言对于数据可视化和数据处理非常有用。

我为你编写了一份工作代码:

https://www.funfun.io/1/#/edit/5a7da69316e6737a215e6f8f

我使用带有嵌入电子表格的在线编辑器来构建此示例,由于JSON文件(在设置下面),电子表格中的数据可以在javascript中使用:

{
    "data": "=A1:C4"
}

对于这个例子,我需要创建假值来显示条形图,这样就不会有不同性能之间的长度差异。所以我计算了三个不同的百分比。

    var falseArrayZendesk = [];
    var falseArrayIndustry = [];
    var falseValues =[];

    var totalPerPerformance = [100, 60, 1500] // custom average so that the bars all does the same length

    ...

    falseArrayZendesk.push((falseZendesk * 100) / totalPerPerformance[i - 1]);
    falseArrayIndustry.push((falseIndustry * 100) / totalPerPerformance[i - 1]);

然后我将每个数组添加到图表中并更改标签,以便在每个条形的末尾显示的实际值如下:

  /*
   *  enter false values in series to display a correct chart
   */
    var series = [];
  for(var i = legend.length - 1; i >= 0; i--) {
    series.push({
        name: legend[i],
        type: 'column',
        color: Highcharts.getOptions().colors[i+7],
        data: falseValues[i]
    });
    }

      ...

  plotOptions: {
        series: {
            dataLabels: {
                enabled: true,
              formatter: function() {
              /*
               * Format the the number at the end of the bars (put the real value).
               * this.x is the false average value.
               * this.series.name is the legend of both column.
               */
                switch (this.x) {
                  case "Satisfaction Rating": {
                    if (this.series.name == "Zendesk")
                      return Zendesk[0] + '%';
                    if (this.series.name == "Industry Average")
                      return Industry[0] + '%';
                    return;
                  }
                  case "Average First Reply Time": {
                    if (this.series.name == "Zendesk")
                      return Zendesk[1] + " hrs";
                    if (this.series.name == "Industry Average")
                      return Industry[1] + " hrs";
                    return;
                  }
                  case "New Tickets": {
                    if (this.series.name == "Zendesk")
                      return Zendesk[2];
                    if (this.series.name == "Industry Average")
                      return Industry[2]; 
                  } 
                  default:
                    return "undefined";
                }
              }
            }
        }
    },

请参阅示例以获得更高精度,例如我用于此图表的功能。如果你发现这个丑陋(正如QHart所说"丑陋"是主观的)你可以根据需要改变任意数量的选项,有很多可用的功能见Highcharts' documentation

构建图表后,您可以通过粘贴Funfun Add-in中的URL将其上传到Excel中。以下是我的示例:

final

希望这有帮助!

披露:我是funfun的开发者