我希望能够使用ChartJs生成条形图和饼图。我使用php和mysql来获取数据。我想生成的条形图是一个显示学生统计数据的图表,其中包括男生和女生的统计数据,以及学生总数。下面是一个我希望结果如何显示的示例:
它可能不完全像它,但我觉得它给了一个想法。我的代码问题,我似乎不明白,因为我是一个新手的ChartJs,只是尝试一下,因为morris.js是不完全支持。以下是我的代码看起来:
HTML格式
<div class="box box-success">
<div class="box box-header with-border">
<h3 class="box-title">Student Chart</h3>
<div class="box-tools pull-right">
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
</button>
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
</div>
<div class="box-body">
<canvas id="mycanvas" style="height:230px;"></canvas>
</div>
</div>
脚本:
$.ajax({
url: 'data.php',
type: 'GET',
success:function(data){
console.log(data);
var male = [];
var female = [];
for(var count in data){
male.push(data[count].male);
female.push(data[count].female);
}
var chartdata = {
labels: male,
datasets: [
{
label: 'Student Gender',
backgroundColor: 'rgba(200, 200, 200, 0.75)',
borderColor: 'rgba(200, 200, 200, 0.75)',
hoverbackgroundColor: 'rgba(200, 200, 200, 1)',
hoverborderColor: 'rgba(200, 200, 200, 1)',
data:female
}
]
};
var ctx = $('#mycanvas');
var barGraph = new Chart(ctx, {
type:'bar',
data: chartdata
});
},
error:function(data){
console.log(data);
}
});
data.php
$query = "SELECT
SUM(CASE WHEN gender = 'Male' THEN 1 ELSE 0 END) as Male,
SUM(CASE WHEN gender = 'Female' THEN 1 ELSE 0 END) as Female
FROM students";
$output = array();
if ($result = mysqli_query($connection, $query)) {
# code...
foreach ($result as $row) {
# code...
$output[] = $row;
}
} else {
die("There was a problem". mysqli_error($connection));
}
echo json_encode($output);
下面是我从控制台得到的结果:
【{“男”:“5”,“女”:“2”}】
将感谢建议,我如何可以使它更好,并做同样的饼图也。
根据我所做的,这是我的图表的显示方式:
注意请忽略照片上的频率。
2条答案
按热度按时间sxpgvts31#
建议您将SQL查询更改为以下内容。
脚本:
unhi4e5o2#
我意识到问题出在我的脚本上。非常感谢@milan kumar帮助我完成了查询。我所缺少的是我发送到 AJAX 的数据类型的规范。我所要做的就是在success函数之前添加值为'json'的dataType,它就可以完美地工作了。代码应该是这样的:
脚本:
我添加了一些可选属性来美化图表。