← Back to JavaScript Course | Chapter 10: DOM Advanced | Lesson 8 of 8

JS का Chart.js

Chart.js एक लोकप्रिय, free JavaScript charting library है जो canvas के ऊपर बनी है, जो आम chart types -- bar, line, pie, doughnut, radar -- को axes, legends, tooltips, और animations के साथ, manual drawing code के बजाय एक single configuration object से संभालती है।
Syntax
javascript
new Chart(canvasElement, {
  type: "bar",
  data: { labels: [], datasets: [{ data: [] }] },
  options: {}
});

Chart.js Setup करना

Chart.js को एक <script> tag (किसी CDN से या local copy से) के ज़रिए शामिल किया जाता है, जिसके बाद global Chart constructor उपलब्ध हो जाता है -- new Chart(canvasElement, config) फिर उस canvas पर तुरंत एक chart बनाता और render करता है।

Note: Chart constructor इस्तेमाल करने वाले अपने खुद के script से पहले Chart.js script tag शामिल करें, वरना आपके code के चलने पर यह अभी defined नहीं होगा।
Warning: Chart.js को render करने के लिए एक असली canvas element चाहिए -- किसी div या दूसरे non-canvas element को पास करना fail हो जाएगा।

उदाहरण: Setting Up Chart.js

javascript
<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  // Draw a bar chart into the canvas, with two bars labeled "A" and "B"
  new Chart(document.getElementById("myChart"), {
    type: "bar",
    data: { labels: ["A", "B"], datasets: [{ data: [10, 20] }] },
  });
</script>

Chart Types

configuration object में type field chart style चुनता है -- bar charts के लिए "bar", line graphs के लिए "line", proportion charts के लिए "pie" और "doughnut", multi-axis comparisons के लिए "radar" -- एक जैसी data/options structure हर एक के हिसाब से adapt होती है।

Note: यह जल्दी compare करने के लिए कि एक जैसा data अलग-अलग chart styles में कैसा दिखता है, किसी मौजूदा configuration पर सिर्फ type field बदलने की कोशिश करें।
Warning: हर chart type हर तरह के data के लिए उपयुक्त नहीं है -- एक pie chart किसी पूरे के हिस्सों के लिए अच्छा काम करता है, पर समय के साथ किसी trend के लिए बुरी तरह, जिसे एक line chart बेहतर संभालता है।

उदाहरण: Chart Types

javascript
<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  // Draw a pie chart into the canvas, split between "Yes" and "No"
  new Chart(document.getElementById("myChart"), {
    type: "pie",
    data: { labels: ["Yes", "No"], datasets: [{ data: [70, 30] }] },
  });
</script>

Data और Datasets Configure करना

data object में labels (किसी axis पर या legend में दिखने वाली categories) और एक या ज़्यादा datasets होते हैं, हर एक की अपनी values और visual styling (जैसे backgroundColor) -- एक chart पर कई datasets आपको एक साथ कई data series compare करने देते हैं।

Note: जब एक ही chart पर एक से ज़्यादा datasets दिखाएं, तो हर एक को एक साफ label और अलग रंग दें, ताकि legend उन्हें साफ तौर पर अलग-अलग दिखाए।
Warning: हर dataset की data array में values की संख्या labels की संख्या से मेल खानी चाहिए -- एक mismatch गायब या गलत तरीके से aligned bars वाला chart देता है।

उदाहरण: Configuring Data and Datasets

javascript
<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  // Draw a bar chart comparing two datasets (2023 vs 2024) across Jan/Feb
  new Chart(document.getElementById("myChart"), {
    type: "bar",
    data: {
      labels: ["Jan", "Feb"],
      datasets: [
        { label: "2023", data: [10, 20], backgroundColor: "blue" },
        { label: "2024", data: [15, 25], backgroundColor: "green" },
      ],
    },
  });
</script>

एक Chart को Dynamically Update करना

किसी chart instance की .data property को सीधे modify किया जा सकता है (जैसे किसी dataset की data array को फिर से assign करना), और बाद में chart पर .update() कॉल करना पूरे chart को destroy और recreate किए बिना नई values में एक animated transition के साथ उसे फिर से draw करता है।

Note: live-updating dashboards के लिए, हर refresh पर chart को गिराकर फिर से बनाने के बजाय, मौजूदा chart instance का data modify करें और .update() कॉल करें।
Warning: किसी chart का data बदलने के बाद .update() कॉल करना भूल जाना visual display को तब तक अनबदला छोड़ देता है जब तक कोई और चीज़ एक redraw trigger न करे।

उदाहरण: Updating a Chart Dynamically

javascript
<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  const chart = new Chart(document.getElementById("myChart"), {
    type: "bar",
    data: { labels: ["A", "B"], datasets: [{ data: [10, 20] }] },
  });
  chart.data.datasets[0].data = [30, 5];
  chart.update(); // animated transition to new values
</script>

किसी Chart को दोबारा बनाने से पहले उसे Destroy करना

पहले original को destroy किए बिना उसी canvas पर एक दूसरा Chart instance बनाने की कोशिश करना overlapping या टूटा हुआ rendering देता है -- मौजूदा chart instance पर .destroy() कॉल करना एक नया बनने से पहले उसे सही तरीके से साफ कर देता है।

Note: हर Chart instance का एक reference store करें ताकि आप बाद में उस पर .destroy() कॉल कर सकें, खासतौर पर किसी भी code path में जो उसी canvas पर एक chart को दोबारा बना सकता है।
Warning: पहले पुराने को destroy किए बिना, पहले से active Chart instance वाले किसी canvas पर एक नया chart बनाना "मेरा chart टूटा हुआ दिख रहा है" जैसे bugs का एक बहुत आम कारण है।

उदाहरण: Destroying a Chart Before Recreating It

javascript
<canvas id="myChart"></canvas>
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
  let chart = new Chart(document.getElementById("myChart"), {
    type: "bar",
    data: { labels: ["A"], datasets: [{ data: [5] }] },
  });
  chart.destroy(); // clean up before recreating
  chart = new Chart(document.getElementById("myChart"), {
    type: "line",
    data: { labels: ["A"], datasets: [{ data: [10] }] },
  });
</script>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. Chart constructor इस्तेमाल करने से पहले Chart.js script को खुद शामिल करना भूल जाना, जिससे एक "Chart is not defined" error आता है।
  2. API के element खुद expect करने पर canvas element की ID को string की तरह pass करना (या इसका उल्टा) -- Chart.js दोनों accept करता है, लेकिन अपने खुद के helper code में उन्हें मिला देना confusion पैदा कर सकता है।
  3. same canvas पर एक नया chart बनाने से पहले existing chart instance पर .destroy() कॉल न करना, overlapping या ghost charts छोड़ते हुए।
चैप्टर सारांश
  • new Chart(canvasElement, config) एक chart बनाता है, जहाँ config chart type, data, और options specify करता है।
  • Chart.js type field के ज़रिए कई built-in chart types (bar, line, pie, doughnut, radar, और ज़्यादा) support करता है।
  • किसी chart का data update करना और .update() कॉल करना पूरे chart को दोबारा बनाए बिना smooth transitions के साथ उसे refresh कर देता है।
ब्राउज़र सपोर्ट

Chart.js Canvas support करने वाले हर modern browser में काम करता है, जो current browsers में प्रभावी रूप से universal है।

🔒

Chapter Quiz — Complete all 8 topics to unlock

0/8 topics done

Complete these topics first:

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.