2012-12-20 33 views
8
Ben yığılmış çubukların iki grubu karşılaştırmak için bir araya toplanır yığılmış çubukların iki takım bir çubuk grafik yapmak istiyorum

farklı renkli çubuklar oluşan iki gruba göstermeye Jqplot nasıl kullanılır. Bu aşağıdaki şekilde görüntülenmesi gereken: Bu linkaynı yığılmış çubuk grafikte

aracılığıyla gitti Ama yukarıdaki resimde gördüğünüz gibi bana arsa şey yardımcı olmadı

Bar chart

. Hatta [[s1, s2, s3], [s4, s5, s6]] gibi iki veri setleri göndererek çalıştı Ama beni grafik çizmek yardımcı olmadı. kimse nasıl yapılacağını biliyor mu?

Herhangi bir yardım büyük takdir edilecektir. Şimdiden teşekkürler. seçeneği stackSeries: true Ayar

+0

kimse bana bu konuda yardımcı olabilir misiniz? –

cevap

3

çubuk grafikler için istediğiniz ekranı yaratacaktır.

+0

Merhaba MLX, yalnızca bir veri dizisiyle çalıştığımızda işe yarayacak.Burada, iki kümeli yığılmış grafiklerimiz var (turuncu-yeşil-mavi VE siyah-gri-mor). Sadece turuncu-yeşil-mavi yığınları görüntülemek istiyorsak, o zaman mümkündür. –

+0

Bu, sorulan sorular için işe yaramaz: farklı renklerle birlikte gruplandırılmış iki farklı veri kümesi. Evet, * tek bir veri kümesinin * yığılmış çubuk grafik olarak görüntülenmesine neden olur, ancak bu soru tarafından önceden varsayılmıştır. – Makyen

2

resmi kaynaklar:

jqPlot documentation yılında webpage, README.txt, optionsTutorial.txt, jqPlotOptions.txt, jqPlotOptions.txt, jqPlotCssStyling.txt, usage.txt, Changes.txt görebilirsiniz güncel değil bu yüzden source code'a bir göz attım. Ne yazık ki, bir yığın çubuk grafik ile doğrudan iki set çubukları olmanın bir yolu yoktur. jqPlot.stackSeries özellik yalnızca bir mantıksal değerdir. Sadece fonksiyon, jqPlot'a, her bir diziyi farklı serilerde değerler olduğu kadar çok sayıda çubuk için birbiri üzerine yığması gerektiğini söylemektir. Her seri, ilk dizi altta olacak şekilde her çubuk için bir değer çizilir. Diğer bir deyişle, tüm [0] değerlerinin tümü ilk çubukta, ikinci olarak [1] değerlerinde çizilir. Çubukta gösterilen miktar, geçerli seri ve önceki tüm seriler için [n] değerinin toplamıdır. İki veya daha fazla dizi grup olduğunu belirtmenin bir yolu yoktur. İsteneni gerçekleştirme yeteneği jqPlot içinde mevcut değildir.

Ama ne arzu başarabilirsiniz:

jqPlot doğal yaratıcı almak gerekir sadece o, size bunu yapamaz anlamına gelmez istediğini desteklemiyor olması. diğer grafikten çubuklar için yeterli alan (seriesDefaults.rendererOptions.barMargin) izin ayrı grafikler bar arasındaki mesafe ile birbiri üzerine bindirilmiş olan iki ayrı grafikler olarak bakılabilir arzu grafik sonraki kapatmak üzere

onlara.

oluşturmak için jqPlot kullanabilirsiniz: grafik ölçeği, arka plan ve görünür olmasını set arzu kare çizgiler var, diyeceksin enter image description here

. Grafiğin içinde fazladan bir çubuk olduğunu unutmayın. Bu, diğer grafikte sağlanan son çubuk için yeterli arka plan ve ızgara çizgileri sağlamak için gereklidir.

Ayrıca ikinci grafik oluşturmak için jqPlot kullanabilir: Second graph with transparent background

Bu grafik görünmeyebilir için jqPlot ayarlanır ölçek ve ızgara hatları vardır.

seriesDefaults.axes.xaxis.tickOptions.show = false; 
seriesDefaults.axes.yaxis.tickOptions.show = false; 
etc. 

arka plan transparent olmak için ayarlanır. İlk grafiğe göre <div>'u konumlandırırken bu grafiğin konumunu biraz sağa kaydırmanız gerekeceğini unutmayın.

Üst Üste, ne kadar son: Web sayfanızın arka plan rengiyle aynı arka plan rengiyle Overlay Graph 1 and Graph 2

Daha sonra kullanmak boş <div> ve birinci grafikte ekstra çubuğunu kapsayacak şekilde bu yerleştirebilir ama bırakarak İlk grafiğin arka plan ve ızgara çizgilerinden, ikinci grafiğin son çubuğunu geçecek kadar uzatır.

Sen ile sona erecek: Sen jqPlot 1.0.8r1250 kullanarak working solution at at JSFiddle görebilirsiniz

Final graph

. iki en göze çarpan fark Arasında Compare jqPlot version with original desire Y-ekseni arasındaki büyük boşluk: Grafiğin son hali vs orijinal isteği karşılaştırılması

onlar çok yakın olduğunu görebilirsiniz bu yöntemi kullanarak üretilen jqPlot sürümü. Ne yazık ki, bu miktarın yığılmış çubuk grafikler için azaltılması için bir seçenek yoktur.

Bu kodun oluşturduğu grafiğin sağında kenarlık olmaması, orijinal istekte bulunmadığından kasıtlı olarak üretildiğini unutmayın. Şahsen, grafiğin sağ tarafında bir kenarlık olmasını tercih ediyorum. Eğer CSS biraz değiştirirseniz, o elde etmek kolaydır: Grafiğin Tercih ettiğim versiyonu solda bir sınır içerir ve boşluk dengeler: Bir çalışma JSFiddle of this version görebilirsiniz My preferred version of the graph

.

Hepsi bir arada zor değil. JqPlot birden fazla çubuk kümesini desteklediyse, elbette daha kolay olurdu. Umarım bir noktada olur. Ancak, son sürüm 2013-03-27 idi ve o zamandan sonra herhangi bir geliştirme çalışması var gibi görünmüyor. Bundan önce her birkaç ayda bir yayınlar vardı. Ancak, jqPlot GPL ve MIT lisansları altında yayınlanır, böylece herkes çalışmaya devam edebilir.

$(document).ready(function() { 
 
    //Numbers derived from desired image 
 
    //var s1 = [10, 29, 35, 48, 0]; 
 
    //var s2 = [34, 24, 15, 20, 0]; 
 
    //var s3 = [18, 19, 26, 52, 0]; 
 
    //Scale to get 30 max on plot 
 
    var s1 = [2, 5.8, 7, 9.6, 0]; 
 
    var s2 = [6.8, 4.8, 3, 4, 0]; 
 
    var s3 = [13.6, 8.8, 3, 7.8, 0]; 
 
    plot4 = $.jqplot('chart4', [s1, s2, s3], { 
 
     // Tell the plot to stack the bars. 
 
     stackSeries: true, 
 
     captureRightClick: true, 
 
     seriesColors: ["#1B95D9", "#A5BC4E", "#E48701"], 
 
     seriesDefaults: { 
 
      shadow: false, 
 
      renderer: $.jqplot.BarRenderer, 
 
      rendererOptions: { 
 
       // jqPlot does not actually obey these except barWidth. 
 
       barPadding: 0, 
 
       barMargin: 66, 
 
       barWidth: 38, 
 
       // Highlight bars when mouse button pressed. 
 
       // Disables default highlighting on mouse over. 
 
       highlightMouseDown: false 
 
      }, 
 
      title: { 
 
       text: '', // title for the plot, 
 
       show: false, 
 
      }, 
 
      markerOptions: { 
 
       show: false, // wether to show data point markers. 
 
      }, 
 
      pointLabels: { 
 
       show: false 
 
      } 
 
     }, 
 
     axes: { 
 
      xaxis: { 
 
       renderer: $.jqplot.CategoryAxisRenderer, 
 
       tickOptions: { 
 
        show: false 
 
       }, 
 
       lastPropertyConvenience: 0 
 
      }, 
 
      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: false, 
 
      location: 'e', 
 
      placement: 'outside' 
 
     }, 
 
     grid: { 
 
      drawGridLines: true, // wether to draw lines across the grid or not. 
 
      shadow: false, // no shadow 
 
      borderWidth: 1, 
 
      background: 'white', // CSS color spec for background color of grid. 
 
      lastPropertyConvenience: 0 
 
     }, 
 
     lastPropertyConvenience: 0 
 
    }); 
 
}); 
 
    
 
    $(document).ready(function() { 
 
     //Numbers derived from desired image 
 
     //var s1 = [10, 29, 35, 48, 0]; 
 
     //var s2 = [34, 24, 15, 20, 0]; 
 
     //var s3 = [18, 19, 26, 52, 0]; 
 
     //Scale to get 30 max on plot 
 
     var s1 = [2, 5.8, 7, 9.6, 0]; 
 
     var s2 = [6.8, 4.8, 3, 4, 0]; 
 
     var s3 = [3.6, 3.8, 5.2, 10.4, 0]; 
 
     plot4 = $.jqplot('chart5', [s1, s2, s3], { 
 
      // Tell the plot to stack the bars. 
 
      stackSeries: true, 
 
      captureRightClick: true, 
 
      seriesColors: ["#754DE9", "#666666", "#000000"], 
 
      seriesDefaults: { 
 
       shadow: false, 
 
       renderer: $.jqplot.BarRenderer, 
 
       rendererOptions: { 
 
        // jqPlot does not obey these options except barWidth. 
 
        show: true, 
 
        barPadding: 0, 
 
        barMargin: 66, 
 
        barWidth: 38, 
 
        // Highlight bars when mouse button pressed. 
 
        // Disables default highlighting on mouse over. 
 
        highlightMouseDown: false 
 
       }, 
 
       title: { 
 
        text: '', // title for the plot, 
 
        show: false, 
 
       }, 
 
       markerOptions: { 
 
        show: false, // wether to show data point markers. 
 
       }, 
 
       pointLabels: { 
 
        show: false 
 
       } 
 
      }, 
 
      axesDefaults: { 
 
       //show: false  
 
      }, 
 
      axes: { 
 
       xaxis: { 
 
        renderer: $.jqplot.CategoryAxisRenderer, 
 
        tickOptions: { 
 
         show: false 
 
        }, 
 
        lastPropertyConvenience: 0 
 
       }, 
 
       yaxis: { 
 
        show: false, 
 
        // 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, 
 
        tickOptions: { 
 
         show: false 
 
        }, 
 
       } 
 
      }, 
 
      legend: { 
 
       show: false, 
 
       location: 'e', 
 
       placement: 'outside' 
 
      }, 
 
      grid: { 
 
       drawGridLines: false, // wether to draw lines across the grid or not. 
 
       shadow: false, // no shadow 
 
       borderWidth: 10, 
 
       background: 'transparent', // CSS color for background color of grid. 
 
       gridLineColor: 'transparent', // *Color of the grid lines. 
 
       borderColor: 'transparent', // CSS color for border around grid. 
 
       lastPropertyConvenience: 0 
 
      }, 
 
      lastPropertyConvenience: 0 
 
     }); 
 
    });
#cover1 { 
 
    padding:0; 
 
    margin: 0; 
 
    background-color: white; 
 
    left: 451px; 
 
    width: 88px; 
 
    /* Uncomment the next three lines to have a border on the right of the graph and 
 
     balanced whitespace:*/ 
 
    /* 
 
    border-left: 2px solid #CCCCCC; 
 
    left:476px; 
 
    width: 62px; 
 
    */ 
 
} 
 
#chart4 .jqplot-xaxis-tick { 
 
    visibility: hidden; 
 
} 
 
#chart5 .jqplot-xaxis-tick { 
 
    visibility: hidden; 
 
} 
 
#chart4 .jqplot-yaxis-tick { 
 
    font: 9px arial 
 
}
<link class="include" rel="stylesheet" type="text/css" href="http://cdn.jsdelivr.net/jqplot/1.0.8/jquery.jqplot.css" /> 
 

 
<!--[if lt IE 9]><script language="javascript" type="text/javascript" src="http://cdn.jsdelivr.net/excanvas/r3/excanvas.js"></script><![endif]--> 
 
<script class="include" type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<!-- Main jqPlot --> 
 
<script class="include" type="text/javascript" src="http://cdn.jsdelivr.net/jqplot/1.0.8/jquery.jqplot.js"></script> 
 
<!-- Additional jqPlot plugins --> 
 
<script class="include" type="text/javascript" src="http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.barRenderer.min.js"></script> 
 
<script class="include" type="text/javascript" src="http://cdn.jsdelivr.net/jqplot/1.0.8/plugins/jqplot.categoryAxisRenderer.min.js"></script> 
 

 

 
<div style="position:absolute; left:10px; top:10px;"> 
 
    <div id="chart4" style="width:548px; height:185px;"></div> 
 
    <div id="chart5" style="width:536px; height:185px; top:-185px; left:53px;"></div> 
 
    <div id="cover1" style="position: relative; height: 152px; top:-361px;"></div> 
 
</div>

Yukarıdaki kod example page listed in the question o dayanır.

0

Pratik çözüm ...

$(document).ready(function(){ 
    var s1 = [2, 0, 0, 10,11,0, 6, 2, 0,10,11]; 
    var s2 = [7, 0, 0, 4,11,0, 6, 2, 0,10,11]; 
    var s3 = [4, 0, 0, 7,11,0, 6, 2, 0,10,11]; 
    var s4 = [0, 20, 0, 0,0,0, 0, 0, 0,0,0]; 
    plot3 = $.jqplot('chart3', [s1, s2, s3,s4], { 
    stackSeries: true, 
    captureRightClick: true, 
    seriesDefaults:{ 
     renderer:$.jqplot.BarRenderer, 
     rendererOptions: { 
      barMargin: 30, 
      highlightMouseDown: true 
     }, 
     pointLabels: {show: true} 
    }, 
    axes: { 
     xaxis: { 
      renderer: $.jqplot.CategoryAxisRenderer 
     }, 
     yaxis: { 
     padMin: 0 
     } 
    }, 
    legend: { 
     show: true, 
     location: 'e', 
     placement: 'outside' 
    }  
    }); 
    $('#chart3').bind('jqplotDataClick', 
    function (ev, seriesIndex, pointIndex, data) { 
     $('#info3').html('series: '+seriesIndex+', point: '+pointIndex+', data: '+data); 
    } 
); 
}); 

Resim: enter image description here

İlgili konular