【问题标题】:jqplot - Individual values, not totals in stacked chartjqplot - 单个值,而不是堆积图中的总计
【发布时间】:2012-01-28 16:50:38
【问题描述】:

在堆积条形图中,我们可以显示每个堆栈中每个系列的总数,如下所示 但是我希望显示每个系列的值,而不是这样的总数(请忽略两个样本具有不同系列数量的事实) 此外,我想在顶部显示堆栈的总数。 我的意思是,如果你看第一张图,在第一个栏中,值是 5,15(5+10),24(15+9)。 我想要的结果应该像第二张图一样,其中第一个条的值是 10,9,最后是前 19 的总和
这个库可以吗?

【问题讨论】:

    标签: jquery jqplot


    【解决方案1】:

    这里有点破解。由于您需要为每个系列添加一个标签,因此我介绍了一个“空”系列。不过,它很好地复制了你想要的东西。小提琴here.

    $(document).ready(function(){
      var s1 = [5, 6];
      var s2 = [7, 5];
      var s3 = [14, 9];
      var s4 = [0, 0]; //empty series just for total labels
    
      var pLabels1 = []; // arrays for each inner label
      var pLabels2 = [];
      var pLabels3 = [];
      var pLabelsTotal = []; // array of totals above each column
      for (var i = 0; i < s1.length; i++){
          pLabels1.push('<div style="border:1px solid gray">'+s1[i]+'</div>');
          pLabels2.push('<div style="border:1px solid gray">'+s2[i]+'</div>');
          pLabels3.push('<div style="border:1px solid gray">'+s3[i]+'</div>');
          pLabelsTotal.push(s1[i]+s2[i]+s3[i]);      
      }   
    
      plot3 = $.jqplot('chart2', [s1, s2, s3, s4], {
        // Tell the plot to stack the bars.
        stackSeries: true,
        captureRightClick: true,
        seriesDefaults:{
          renderer:$.jqplot.BarRenderer,
          rendererOptions: {
              // Put a 30 pixel margin between bars.
              barMargin: 30,
              // Highlight bars when mouse button pressed.
              // Disables default highlighting on mouse over.
              highlightMouseDown: true   
          },
        },
        series:[
            {
                pointLabels:{
                    show:true,
                    labels:pLabels1,
                    ypadding: -25,
                    escapeHTML:false
                }
            },
            {
                pointLabels:{
                    show:true,
                    labels:pLabels2,
                    ypadding: -25,
                    escapeHTML:false
                }
            },
                    {
                pointLabels:{
                    show:true,
                    labels:pLabels3,
                    ypadding: -25,
                    escapeHTML:false
                }
            },
                  {
                pointLabels:{
                    show:true,
                    labels:pLabelsTotal,
                    ypadding: 7,
                    escapeHTML:false
                }
            }
        ],
        axes: {
          xaxis: {
              renderer: $.jqplot.CategoryAxisRenderer
          },
          yaxis: {
            padMin: 0,
            min: 0
          }
        },
        legend: {
          show: false,
        }      
      });
    });
    

    生产:

    【讨论】:

    • 嗯,很棒的 tnx。出于某种原因,小提琴不起作用,我猜资源的链接是错误的。 Tnx 反正
    • @anu,抱歉应该提到小提琴。 jqplot 不允许热链接他们的 js 文件。您必须导航到文件并将它们缓存在浏览器中才能使小提琴正常工作。
    • 我为此代码制作了一个 jsfiddle 示例,该示例导入了原始 jqPlot 脚本,因此如果有兴趣,您可以轻松查看代码运行 jsfiddle.net/Boro/Ymca3/135 我只需将字符串连接添加到 pLabelsTotal.push(""+(s1[i]+s2[i]+s3[i]));至于一些奇怪的原因,它在每个总数之后显示.00。不久前我也做了一个类似的解决方案,尽管在我的示例中,总数是硬编码的。有兴趣的可以看这里stackoverflow.com/a/10296988/613495
    • @Boro 这对 tnx 很有帮助。我在搜索这个问题时找不到那个帖子
    • @Boro:我在重新绘图时更新 pointLables 时遇到问题。你能告诉我怎么了in this script。条形图正在正确更新,但标签没有更新。
    猜你喜欢
    • 2019-03-10
    • 2015-01-04
    • 2016-02-14
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多