Not understanding why chart js wont load - javascript

Chart JS 3.9.1
Laravel 9.x
There are 50 thousand questions using 20 different versions and none of them, from what I have found are helpful. I have checked the version, checked the docs, and even checked the page source to see if data was in place. No Errors, No Chart, Nothing.
In a blade file I have done:
<div>
<canvas id="item-listing-data" width="400" height="400"></canvas>
</div>
#push('scripts')
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('item-listing-data').getContext('2d');
const saleDataChart = new Chart(ctx, {
type: 'line',
labels: #json($saleData['labels']),
datasets: [{
label: 'Sale Data',
data: #json($saleData['data']),
fill: false,
borderColor: 'rgb(34, 67, 156)',
tension: 0.1
}]
});
</script>
#endpush
As far as I know, from the docs this is what you do. This is how you render the chart.
If I inspect the page to see the JS that gets spit out:
const ctx = document.getElementById('item-listing-data');
const saleDataChart = new Chart(ctx, {
type: 'line',
labels: ["Mon Aug 2022 14:08:13"],
datasets: [{
label: 'Sale Data',
data: [10000],
fill: false,
borderColor: 'rgb(34, 67, 156)',
tension: 0.1
}]
});
Looks right to me.
When I investigate the page I see a div that is way too large, the canvas element - but Im sure that can be fixed with options, and no chart. Just an empty canvas.
Again, I know this question has been asked a thousand times, but I:
Followed the docs
Checked for issues in my code
Made sure I was loading the correct version of chart js
And still no chart, no errors, nothing.
Even if I replace labels and data with [1,2,3] - Nothing, no chart, no errors.
Thoughts?

AFA I can see, the issue seems to be in the chart configuration and the data node is missing.
Without it, the chart doesn't have data to show.
The code should be:
<div>
<canvas id="item-listing-data" width="400" height="400"></canvas>
</div>
#push('scripts')
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
<script>
const ctx = document.getElementById('item-listing-data').getContext('2d');
const saleDataChart = new Chart(ctx, {
type: 'line',
data: { // <--- this was missing
labels: #json($saleData['labels']),
datasets: [{
label: 'Sale Data',
data: #json($saleData['data']),
fill: false,
borderColor: 'rgb(34, 67, 156)',
tension: 0.1
}]
}
});
</script>
#endpush

Related

changing labels on chart js and changing text colors

Its all very new to me, so please bare with me, this is my first chart
id like a couple of changes
I want the values to appear on the top of the bars
and also need to change the color of the text on the axes, the months and min-max values
would appreciate if anyone can modify my code and send it back, I will play with the rgb colors later
<!DOCTYPE html>
<html>
<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.js"></script>
<body>
<canvas id="myChart" style="width:100%;max-width:600px"></canvas>
<script>
var xValues = ["Jun","Jul","Aug","Sep","Oct","Nov"];
var yValues = [12000,12000,13000,17000,15347,12475];
new Chart("myChart", {
type: "bar",
data: {
labels: xValues,
datasets: [{
fill: false,
lineTension: 0,
backgroundColor: "rgba(245,161,0,1.0)",
borderColor: "rgba(0,0,255,0.1)",
data: yValues
}]
},
options: {
legend:
{display: false},
scales: {
yAxes: [{ticks: {min: 0, max:20000}}],
}
}
});
</script>
</body>
</html>
explained above in the upper box

vanilla js error "cannot set property of undefined" on the chrome console

Hey I'm new to chartjs and js in general and keep getting the error ""cannot set property of undefined" on the chrome console
const dataPie = {
labels: ['Good Packs', 'Bad Packs'],
datasets: [{
label: 'My First Dataset',
data: [0.1, 0.1],
backgroundColor: ['#00bf90', 'rgb(255, 75, 75)'],
hoverOffset: 0
}]
};
const configPie = {
type: 'pie',
data: dataPie,
options: {}
};
const pieChart = new Chart(
document.getElementById('chart-pie'),
configPie
);
then in a timed loop I'm calling this and getting the error "cannot set property of undefined" when trying to do the below operation (I'm not setting the value in html and it is only set when building the pie-chart at the top).
pieChart.data.datasets.data[0] = 0.5;
like I said I'm very new to js so if anyone can help that would be great!
It looks like you were accessing the data wrong, I will include a link to the documentation. I have modified your snippet below (I don't have a timer, but I have the code changing). Make sure you call update after changing the value so it will reflect in the HTML.
datasets is an array, so you need to access the index of the dataset you wish to modify. In your case, it is [0] as you only have one dataset.
ChartJs Documentation:
https://www.chartjs.org/docs/latest/developers/api.html
const dataPie = {
labels: ['Good Packs', 'Bad Packs'],
datasets: [{
label: 'My First Dataset',
data: [0.1, 0.1],
backgroundColor: ['#00bf90', 'rgb(255, 75, 75)'],
hoverOffset: 0
}]
};
const configPie = {
type: 'pie',
data: dataPie,
options: {}
};
const pieChart = new Chart(
document.getElementById('chart-pie').getContext('2d'),
configPie
);
pieChart.data.datasets[0].data[0] = 0.5;
pieChart.update('active');
<script src="https://cdn.jsdelivr.net/npm/chart.js#3.7.1/dist/chart.min.js"></script>
<canvas id="chart-pie" width="400" height="400"></canvas>

Chart.js not displaying when passing dynamic labels

I am trying to draw a chart by passing values for labels and data dynamically using char.js.
The chart.js module refuses to accept the labels when passed as a variable.
When I hardcode it, it works just fine.
The label variable prints out the values on the page and seems to be correct in format.
Very similar to the problem described in the below query, except that I am already using a proper array.
[https://stackoverflow.com/questions/60453491/chart-js-not-showing-data-when-pass-dynamic-labels][1]
mypage.html:
<script src="https://cdn.jsdelivr.net/npm/chart.js#2.9.4"></script>
{{Messages.vm_size_in_use_labels}}
{{Messages.vm_size_in_use_data}}
<canvas id="chart" width="50" height="50"></canvas>
<script lang="JavaScript">
let ctx = document.getElementById("chart").getContext("2d");
let chart = new Chart(ctx, {
type: "pie",
data: {
labels: {{Messages.vm_size_in_use_labels}},
datasets: [
{
label: "Gross volume ($)",
backgroundColor: "#79AEC8",
borderColor: "#417690",
data: {{Messages.vm_size_in_use_data}},
}
]
},
options: {
title: {
text: "Gross Volume in 2020",
display: true
}
}
});
</script>
The page shows the printed value correctly but chart doesn't display:
['Standard_B1ls', 'Standard_D2_v2', 'Standard_D4s_v3', 'Standard_B1s']
[3, 3, 1, 1]
If I change the label to hard values,
labels: ['Standard_B1ls', 'Standard_D2_v2', 'Standard_D4s_v3', 'Standard_B1s'],
this works just fine and chart is displayed.
Not sure what is missing here. the framework is django if it matters.

Drawing pie chart with chart.js

I'm using chart.js from http://www.chartjs.org/.
I want to draw a pie chart, but nothing is displaying. I managed to draw line chart, so the Javascript is loaded.
HTML
<!-- Chart -->
<script type="text/javascript" src="_javascripts/chart/Chart.min.js"></script>
<!-- //Chart-->
<canvas id="browsersChart" width="400" height="100"></canvas>
<script>
var ctx = document.getElementById("browsersChart");
var myChart = new Chart(ctx, {
type: 'pie',
data: {
datasets: [{
label: 'Browsers',
data: [14, 2, 2, 2, 1],
backgroundColor: [
window.chartColors.red,
window.chartColors.orange,
window.chartColors.yellow,
window.chartColors.green,
window.chartColors.blue,
],
}],
labels: [
"Chrome"
"Firefox"
""
"MSIE"
"Mobile Safari"
]
},
options: {
responsive: true
}
};
</script>
You have some typos in your code.
In the labels section, you need a comma after each label:
labels: [
"Chrome", // These commas at the end need added.
"Firefox",
"",
"MSIE",
"Mobile Safari"
]
You also need to add a ) at the very end of the Chart declaration:
options: {
responsive: true
}
}); // The rounded bracket here needs added
In the future, you should use the dev tools in your browser. The Console tab will tell you about errors like these. It explained exactly what line had errors.
After fixing these typos, I got a pie chart just as expected.

chart.js version 2.4.0 does not display bars for me

I'm trying to display a simple bar chart using chart.js 2.4.0 (the most recent version). I've followed two tutorials and do not see what I am doing wrong. The grid displays, but the bars do not. It's as if it is not seeing the data set data at all.
I've simplified the page, so at this point it is only loading jquery-2.1.4.min.js before the 2.4.0 Chart.bundle.min.js. No other js library is loaded.
Here is the html code:
<div id="scorecard_results1" class="scorecard_results" >
<div id="holder1"></div>
<canvas id="bargraph1"></canvas>
<script type="text/javascript" charset="utf-8">
var ctx = document.getElementById("bargraph1");
console.log("id is " + ctx.id);
var bargraph = new Chart(ctx, {
type: 'bar',
data: {
labels: ["Red", "Blue", "Yellow", "Green", "Purple", "Orange"],
dataSets : [{
label: "test",
data: [12, 19, 3, 5, 2, 3],
backgroundColor: "#333"
} ]
}
});
</script>
</div>
As you can see, it is basically copied directly from the Chart.js example in the documentation. I've googled but have not found anything helpful. It should just work from all I've read. Not sure what I am doing wrong.
There are no errors showing up in the firebug console. Any suggestions on how to debug or troubleshoot this would be greatly appreciated.
You have a type-O for the dataSets property. Should be datasets (lowercase s).
datasets
https://jsfiddle.net/fhx55z43/3/

Categories

Resources