2012-12-20 22 views
8

में अलग-अलग रंगीन सलाखों के दो समूहों को दिखाने के लिए जेक्प्लॉट का उपयोग कैसे करें मैं स्टैक्ड बार के दो समूहों की तुलना करने के लिए एक साथ समूहीकृत स्टैक्ड बार के दो सेट के साथ एक बार चार्ट बनाना चाहता हूं। यह निम्नलिखित तरीके से प्रदर्शित किया जाना चाहिए:एक ही स्टैक्ड बार चार्ट

Bar chart

मैं इस link

माध्यम से चले गए लेकिन यह मुझे साजिश कुछ मदद नहीं की तरह आप उपरोक्त चित्र में दिखाई। मैंने [[s1, s2, s3], [s4, s5, s6]] जैसे दो डेटा सेट भेजने की कोशिश की लेकिन यह चार्ट को साजिश करने में मेरी सहायता नहीं करता था। क्या कोई जानता है कि इसे कैसे करें?

किसी भी मदद की सराहना की जाएगी। अग्रिम धन्यवाद।

+0

किसी ने मुझे इस के साथ मदद कर सकते हैं? –

उत्तर

3

विकल्प stackSeries: true सेट करना बार चार्ट के लिए वांछित प्रदर्शन बनाएगा।

+0

हाय एमएलएक्स, यह काम करेगा जब हम केवल एक डेटा श्रृंखला के साथ काम कर रहे हैं।यहां, हमारे पास स्टैक्ड चार्ट (नारंगी-हरा-नीला और काला भूरा-बैंगनी) के दो सेट हैं। कहें कि क्या हम केवल नारंगी-हरे-नीले रंग के ढेर को प्रदर्शित करना चाहते हैं तो यह संभव है। –

+0

यह प्रश्न में क्या पूछा जा रहा है इसके लिए यह काम नहीं करता है: विभिन्न रंगों के साथ समूहित डेटा के दो अलग-अलग सेट। हां, यह एक * एकल सेट * डेटा को स्टैक्ड-बार चार्ट के रूप में प्रदर्शित करने का कारण बनता है, लेकिन यह पहले से ही प्रश्न द्वारा पूर्व निर्धारित किया गया था। – Makyen

2

आधिकारिक सूत्रों:

jqPlot documentationwebpage, README.txt, optionsTutorial.txt, jqPlotOptions.txt, jqPlotOptions.txt, jqPlotCssStyling.txt, usage.txt, changes.txt देख सकते हैं अप टू डेट नहीं है तो मैंने source code पर एक नज़र डाली। दुर्भाग्यवश, स्टैक्ड-बार चार्ट के साथ बार के दो सेट सीधे करने का कोई तरीका नहीं है। jqPlot.stackSeries संपत्ति केवल एक बूलियन मूल्य है। यह एकमात्र फ़ंक्शन है कि jqPlot को प्रत्येक श्रृंखला को एक-दूसरे के ऊपर एक दूसरे के ऊपर ढेर करने के लिए अलग-अलग श्रृंखलाओं में मूल्यों के रूप में बताना है। प्रत्येक श्रृंखला को नीचे की ओर पहली श्रृंखला के साथ एक मूल्य प्रति बार प्लॉट किया गया है। दूसरे शब्दों में, सभी [0] मान पहली बार में [1] मानों में प्लॉट किए गए हैं, आदि। बार के भीतर दिखाया गया राशि वर्तमान श्रृंखला और सभी पूर्व श्रृंखला के लिए [n] मान का योग है। यह निर्दिष्ट करने का कोई तरीका नहीं है कि श्रृंखला के समूह दो या अधिक हैं। वांछित करने की क्षमता सिर्फ jqPlot में मौजूद नहीं है।

लेकिन तुम पूरा कर सकते हैं कि आप क्या चाहते हैं:

तथ्य jqPlot देशी रूप आप क्या चाहते हैं इसका मतलब यह नहीं है कि आप यह नहीं कर सकते का समर्थन नहीं करता है कि, केवल यह है कि आप रचनात्मक पाने के लिए की जरूरत है।

ग्राफ इच्छा दो अलग-अलग रेखांकन है कि व्यक्ति अन्य ग्राफ से सलाखों के लिए पर्याप्त जगह (seriesDefaults.rendererOptions.barMargin) को अनुमति देने के रेखांकन पर सलाखों के बीच अंतर के साथ एक दूसरे पर आच्छादित किया गया है होने के रूप में देखा जा सकता है अगले ढक करने के लिए उनको।

आप बनाने के लिए jqPlot उपयोग कर सकते हैं: enter image description here

ग्राफ पैमाने, पृष्ठभूमि और ग्रिड लाइनों आप दिखाई दे सकता है सेट इच्छा है कि। ध्यान दें कि ग्राफ में इसमें एक अतिरिक्त बार है। अन्य ग्राफ द्वारा प्रदान की गई अंतिम बार के लिए पर्याप्त पृष्ठभूमि और ग्रिड-लाइन प्रदान करने के लिए इसकी आवश्यकता है।

तुम भी दूसरे ग्राफ बनाने के लिए jqPlot उपयोग कर सकते हैं: Second graph with transparent background

यह ग्राफ पैमाने पर और ग्रिड लाइनों jqPlot में सेट दिखाई नहीं हो गया है।

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

पृष्ठभूमि transparent होने के लिए सेट है। ध्यान दें कि पहले ग्राफ के सापेक्ष <div> को स्थिति में रखते समय आपको इस आलेख की स्थिति को कुछ हद तक सही करने की आवश्यकता होगी।

ऊपर रखा गया है, तो आप के साथ अंत: Overlay Graph 1 and Graph 2

फिर आप का प्रयोग कर एक खाली अपने वेबपेज के पृष्ठभूमि रंग के रूप में एक ही पृष्ठभूमि रंग के साथ <div> और उपरिशायी है कि पहली ग्राफ पर अतिरिक्त बार कवर करने के लिए है, लेकिन छोड़ने दूसरे ग्राफ की आखिरी बार के पीछे थोड़ा विस्तार करने के लिए पहले ग्राफ की पृष्ठभूमि और ग्रिड-लाइनों के पर्याप्त।

आप के साथ खत्म हो जाएगा:

Final graph

आप एक working solution at at JSFiddle देख jqPlot 1.0.8r1250 का उपयोग कर सकते हैं।

बनाम ग्राफ के अंतिम संस्करण मूल अनुरोध मुकाबले इस विधि का उपयोग कर उत्पादन आपको लगता है कि वे बहुत करीब हैं देख सकते हैं: Compare jqPlot version with original desire बीच दो सबसे उल्लेखनीय अंतर में Y- अक्ष के बीच बड़ा स्थान है jqPlot संस्करण। दुर्भाग्यवश, स्टैक्ड बार चार्ट के लिए उस राशि को कम करने का विकल्प नहीं लगता है।

ध्यान दें कि इस कोड का उत्पादन करने वाले ग्राफ के दाईं ओर सीमा की कमी जानबूझकर है क्योंकि यह मूल अनुरोध में मौजूद नहीं है। व्यक्तिगत रूप से, मैं ग्राफ के दाहिने तरफ एक सीमा रखना पसंद करता हूं। आप सीएसएस थोड़ा बदलते हैं, कि प्राप्त करने के लिए आसान है: ग्राफ का मेरा पसंदीदा संस्करण बाईं ओर एक सीमा शामिल है और रिक्त स्थान को संतुलित करता है: My preferred version of the graph

आपके पास चालू JSFiddle of this version देख सकते हैं।

ऑल-इन-सब यह मुश्किल नहीं है। यह निश्चित रूप से आसान होगा यदि jqPlot ने बार के कई सेट का समर्थन किया हो। उम्मीद है कि यह किसी बिंदु पर होगा। हालांकि, अंतिम रिलीज 2013-03-27 था और उस समय के बाद कोई विकास कार्य नहीं हुआ प्रतीत होता है। इससे पहले हर कुछ महीनों में रिलीज किया गया था। लेकिन, जेपीप्लॉट जीपीएल और एमआईटी लाइसेंस के तहत जारी किया गया है ताकि कोई भी काम जारी रख सके।

$(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>

ऊपर कोड है कि example page listed in the question पर पर आधारित है।

0

व्यावहारिक समाधान ...

$(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); 
    } 
); 
}); 

छवि: enter image description here

संबंधित मुद्दे