jqplot 并排堆积条形图

Posted

技术标签:

【中文标题】jqplot 并排堆积条形图【英文标题】:jqplot Side by Side Stacked Bar Chart 【发布时间】:2012-03-05 11:17:07 【问题描述】:

是否可以使用 jqplot 实现并排堆叠条形图?例如,X 轴是一个给定的月份,每个月你会有一些堆叠的条形图。

类似这样的:

注意:我要求的是与普通堆叠图表不同的东西。请查看图片以更好地了解我正在尝试做的事情。

【问题讨论】:

【参考方案1】:

没有人为 jqplot 创建过这个功能。 This guy 说他要去。使用像 Flot 这样的不同库,自己为 jqplot 编写插件,或者说服其他人这样做!如果您使用 Flot,他们似乎有一个补丁可以启用此功能 here,但尚未合并。

【讨论】:

【参考方案2】:

您必须在同一个绘图基础上绘制两个图表,如果您不想要任何工具提示或其他东西,这将是可以的,因为它只适用于其中一个绘图试试这个-

$(document).ready(function()
    /* graph config */
    var maxVal = 13;

    /* graph vals */
    var Bar1 = [5, 0, 10, 0, 12, 0];
    var Bar2 = [0, 17, 0, 20, 0, 12 ];
    var BaseVals=[0,0,0,0,0,0];
    /* graph ticks */
    var baseTicks=['Americas','','Europe','','Asia','']
    var EmptyTicks=['','','','','','']


    /* plot the base graph */
    plotbase = $.jqplot('chart3', [BaseVals], 
        seriesDefaults:
            renderer:$.jqplot.BarRenderer,
            rendererOptions: barMargin: 10,
            pointLabels: show: false
        ,
        axesDefaults: show: false, 
        tickOptions: showMark: false, angle: 90, 
        axes: 
            showLabel: false, 
            xaxis: 
                renderer: $.jqplot.CategoryAxisRenderer, 
                ticks: baseTicks, 
                tickOptions: markSize: 0
            , 
            yaxis: 
                padMin: 0, 
                min: 0,
                max: maxVal, 
                showLabel: false, 
                show: false
            
        
    ); 





    plot2 = $.jqplot('chart3', [Bar1], 
        seriesColors: ["#67ce64", "#da9831","#67ce64", "#da9831"],\\this can be changed 
        stackSeries: true,
        captureRightClick: true,
        seriesDefaults:
            renderer:$.jqplot.BarRenderer,
            rendererOptions: barMargin: 10, highlightMouseOver: true,
            pointLabels: show: false
        ,
        axesDefaults: show: false, 
        tickOptions: showMark: false, 
        axes: 
            showLabel: false, 
            xaxis: 
                renderer: $.jqplot.CategoryAxisRenderer, 
                ticks: EmptyTicks
            ,
            yaxis: 
                padMin: 0, 
                min: 0,
                max: maxVal, 
                showLabel: false, 
                show: false
            
        ,
        grid: background: 'transparent', drawGridLines: false, gridLineColor: 'transparent', borderColor: 'transparent'
    );


    plot1 = $.jqplot('chart3', [Bar2], 
        stackSeries: true,
        captureRightClick: true,
        seriesColors: ["#effa38", "#37d1f8", "#5129b6","#5129b6"],//this can be changed 
        seriesDefaults:
            renderer:$.jqplot.BarRenderer,
            rendererOptions: barMargin: 10, highlightMouseOver: true ,
            pointLabels: show: false
        ,
        axes: 
            xaxis: 
                renderer: $.jqplot.CategoryAxisRenderer, 
                tickRenderer:$.jqplot.CanvasAxisTickRenderer,
                ticks: EmptyTicks, 
                tickOptions: 
                    angle: -90, 
                
            ,
            yaxis: 
                padMin: 0, 
                min: 0,
                max: maxVal
            
        , grid: background: 'transparent', drawGridLines: false, gridLineColor: 'transparent', borderColor: 'transparent'
    );

);

但请注意,您只能在其中一个图上应用工具提示/荧光笔

【讨论】:

【参考方案3】:

是的,可以这样做。

来自jqplot的参考

源代码:

$(document).ready(function()
  var s1 = [2, 6, 7, 10];
  var s2 = [7, 5, 3, 4];
  var s3 = [14, 9, 3, 8];
  plot3 = $.jqplot('chart3', [s1, s2, s3], 
    // 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   
      ,
      pointLabels: show: true
    ,
    axes: 
      xaxis: 
          renderer: $.jqplot.CategoryAxisRenderer
      ,
      yaxis: 
        // Don't pad out the bottom of the data range.  By default,
        // axes scaled as if data extended 10% above and below the
        // actual range to prevent data points right on grid boundaries.
        // Don't want to do that here.
        padMin: 0
      
    ,
    legend: 
      show: true,
      location: 'e',
      placement: 'outside'
          
  );
  // Bind a listener to the "jqplotDataClick" event.  Here, simply change
  // the text of the info3 element to show what series and ponit were
  // clicked along with the data for that point.
  $('#chart3').bind('jqplotDataClick', 
    function (ev, seriesIndex, pointIndex, data) 
      $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data);
    
  ); 
);

【讨论】:

我一定没有说清楚。看看链接的图片。您显示的只是一个堆积条形图,每个 x 轴值有一个条形图。我正在寻找一个堆积条形图,每个 x 轴值有多个条形图。

以上是关于jqplot 并排堆积条形图的主要内容,如果未能解决你的问题,请参考以下文章

Pandas 并排堆积条形图

Plotly:如何从单条迹线制作堆积条形图?

如何在不重绘图表的情况下刷新 jqplot 条形图

将堆积条形图转换为 100% 比例堆积条形图

如何使用jQuery或jqPlot自定义PrimeFaces条形图属性

spss如何删除堆积条形图中的某块数据