2016-01-21 9 views
7

मैंने चार्ट.जेएस के v2 के नवीनतम बीटा का उपयोग करना शुरू कर दिया है क्योंकि मुझे एक चार्ट खींचने की आवश्यकता है जिसमें एक स्टैक्ड बार चार्ट और एक अनस्टेड लाइन हो एक ही चार्ट पर चार्ट।चार्टज 2 - एक ही वाई अक्ष के साथ उसी चार्ट पर स्टैक्ड बार और अनस्टैक लाइन

enter image description here

इस चार्ट लाइनों खड़ी नहीं कर रहे हैं और सभी उनके प्राकृतिक मूल्यों दिखा रहे हैं लेकिन बार चार्ट खड़ी और है में मूल्यों का संयुक्त रूप से कुल (कुछ नकारात्मक सहित दिखाता है: यहाँ मैं क्या जरूरत है, इसका एक उदाहरण मान)।

मैंने दो चार्ट एक साथ खींचे हैं लेकिन अब तक मैं केवल चार्ट दोनों स्टैक्ड होने में सफल रहा हूं या मुझे दो अलग-अलग वाई-अक्ष का उपयोग करना पड़ा जो 2 स्केल के साथ समाप्त होता है।

yAxes: [{ 
    stacked: false, 
    ticks: { 
     beginAtZero: true 
    } 
    }, { 
    id: "bar-y-axis", 
    stacked: true, 
    ticks: { 
     beginAtZero: true 
    }, 
    type: 'linear' 
    }] 

अगर मैं पहले y- अक्ष तो हटाने मैं केवल एक समस्या यह है कि अब लाइन चार्ट के साथ-साथ खड़ी है के साथ एक एकल पैमाने के साथ समाप्त हो गया: इस fiddle में अलग y- अक्ष का एक उदाहरण है ।

क्या चार्ट बनाने के लिए कोई तरीका है जैसे मुझे chart.js का उपयोग करने की आवश्यकता है?

उत्तर

9

आप अपने प्रत्येक डेटासेट में एक अलग yAxisID (उदा। yAxisID: "bar-stacked") सेट करने के संयोजन के साथ इस कार्यक्षमता को प्राप्त कर सकते हैं और फिर दूसरा options.scales.yAxes ऑब्जेक्ट जोड़ सकते हैं। तो अगर आप एक डाटासेट के रूप में इस होगा:

{ 
    label: 'Promoters', 
    backgroundColor: "#aad700", 
    yAxisID: "bar-stacked", 
    data: [ 
    50, 44, 52, 62, 48, 58, 59, 50, 51, 52, 53, 54 
    ] 
} 

और उसके बाद आप एक अतिरिक्त yAxes जोड़ना होगा (पहले एक अपनी लाइन डेटासेट [नीचे दिए गए उदाहरण में कोई yAxisId] का संग्रह हो जाएगा, दूसरा सब हो जाएगा सलाखों आप खड़ी करना चाहते हैं) का:

yAxes: [{ 
    stacked: false, 
    ticks: { 
    beginAtZero: true, 
    min: 0, 
    max: 100 
    } 
}, { 
    id: "bar-stacked", 
    stacked: true, 
    display: false, //optional if both yAxes use the same scale 
    ticks: { 
    beginAtZero: true, 
    min: 0, 
    max: 100 
    }, 
    type: 'linear' 
}] 

पूर्ण उदाहरण इस प्रकार है:

<!doctype html> 
 
<html> 
 

 
<head> 
 
    <title>Stacked Bar Chart</title> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script> 
 
    <script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.1.3/Chart.bundle.js"></script> 
 
    <style> 
 
    canvas { 
 
     -moz-user-select: none; 
 
     -webkit-user-select: none; 
 
     -ms-user-select: none; 
 
    } 
 
    </style> 
 
</head> 
 

 
<body> 
 
    <div style="width: 100%"> 
 
    <canvas id="canvas"></canvas> 
 
    </div> 
 
    <script> 
 
    var barChartData = { 
 
     labels: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], 
 
     datasets: [{ 
 
     data: [ 
 
      50, 30, 60, 70, 80, 90, 95, 70, 90, 20, 60, 95 
 
     ], 
 
     type: 'line', 
 
     label: 'This Year', 
 
     fill: false, 
 
     backgroundColor: "#fff", 
 
     borderColor: "#70cbf4", 
 
     borderCapStyle: 'butt', 
 
     borderDash: [], 
 
     borderDashOffset: 0.0, 
 
     borderJoinStyle: 'miter', 
 
     lineTension: 0.3, 
 
     pointBackgroundColor: "#fff", 
 
     pointBorderColor: "#70cbf4", 
 
     pointBorderWidth: 1, 
 
     pointHoverRadius: 5, 
 
     pointHoverBackgroundColor: "#70cbf4", 
 
     pointHoverBorderColor: "#70cbf4", 
 
     pointHoverBorderWidth: 2, 
 
     pointRadius: 4, 
 
     pointHitRadius: 10 
 
     }, { 
 
     data: [ 
 
      25, 40, 30, 70, 60, 50, 40, 70, 40, 80, 30, 90 
 
     ], 
 
     type: 'line', 
 
     label: 'Last Year', 
 
     fill: false, 
 
     backgroundColor: "#fff", 
 
     borderColor: "#737373", 
 
     borderCapStyle: 'butt', 
 
     borderDash: [10, 10], 
 
     borderDashOffset: 0.0, 
 
     borderJoinStyle: 'miter', 
 
     lineTension: .3, 
 
     pointBackgroundColor: "#fff", 
 
     pointBorderColor: "#737373", 
 
     pointBorderWidth: 1, 
 
     pointHoverRadius: 5, 
 
     pointHoverBackgroundColor: "#737373", 
 
     pointHoverBorderColor: "#737373", 
 
     pointHoverBorderWidth: 2, 
 
     pointRadius: 4, 
 
     pointHitRadius: 10 
 
     }, { 
 
     label: 'Promoters', 
 
     backgroundColor: "#aad700", 
 
     yAxisID: "bar-y-axis", 
 
     data: [ 
 
      50, 44, 52, 62, 48, 58, 59, 50, 51, 52, 53, 54 
 
     ] 
 
     }, { 
 
     label: 'Passives', 
 
     backgroundColor: "#ffe100", 
 
     yAxisID: "bar-y-axis", 
 
     data: [ 
 
      20, 21, 24, 25, 26, 17, 28, 19, 20, 11, 22, 33 
 
     ] 
 
     }, { 
 
     label: 'Detractors', 
 
     backgroundColor: "#ef0000", 
 
     yAxisID: "bar-y-axis", 
 
     data: [ 
 
      30, 35, 24, 13, 26, 25, 13, 31, 29, 37, 25, 13 
 
     ] 
 
     }] 
 
    }; 
 

 
    window.onload = function() { 
 
     var ctx = document.getElementById("canvas").getContext("2d"); 
 
     window.myBar = new Chart(ctx, { 
 
     type: 'bar', 
 
     data: barChartData, 
 
     options: { 
 
      title: { 
 
      display: true, 
 
      text: "Chart.js Bar Chart - Stacked" 
 
      }, 
 
      tooltips: { 
 
      mode: 'label' 
 
      }, 
 
      responsive: true, 
 
      scales: { 
 
      xAxes: [{ 
 
       stacked: true, 
 
      }], 
 
      yAxes: [{ 
 
       stacked: false, 
 
       ticks: { 
 
       beginAtZero: true, 
 
       min: 0, 
 
       max: 100 
 
       } 
 
      }, { 
 
       id: "bar-y-axis", 
 
       stacked: true, 
 
       display: false, //optional 
 
       ticks: { 
 
       beginAtZero: true, 
 
       min: 0, 
 
       max: 100 
 
       }, 
 
       type: 'linear' 
 
      }] 
 
      } 
 
     } 
 
     }); 
 
    }; 
 
    </script> 
 
</body> 
 

 
</html>

+2

उपयोगी उत्तर लेकिन यदि आप न्यूनतम और अधिकतम टिक को हार्डकोड नहीं करते हैं तो आपकी लाइन और स्टैक्ड बार में चार्ट पर एक ही स्थान पर 0 नहीं होगा ... –

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