記事詳細
- 投稿日
 - 2025年10月25日21時21分
 - 
        
タイトル
 - 
        
チャートを作成
 - 内容
 - 
        
        
1.jchart.jsをダウンロード
プロジェクトの_Layout.cshtmlの<head>内に下記のように記述
---------------------------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Kakei</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/Kakei.styles.css" asp-append-version="true" />
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>
</head>
--------------------------------------------------------------------------------------------------------------------------
Controller側のコード
// データベースからデータを取得
var records = await _context.Payment.ToListAsync();
var mylabel = recordsi.Select(r => r.PayCategory.CategoryName).ToArray();
var mydata = records.Select(r =>r..Amount) .ToArray();
Jsonのオブジェクトを作成して、Viewに送る。
var chartData = new
{
labels = mylabel,
data = mydata
};
return View(chartData);
----------------------------------------------------------------
//labelに相当するデータにリレーションシップがあるデータベースの場合
//Distinctしなければならないlabelであるから
//データベースからName列をDistinctし、Amount列を取得する例:
var xData = _context.Payment.Include(p => p.PayCategory) //PayCategoryにstring Name列がある
.GroupBy(x => x.PayCategory.CategoryName)
.Select(g => new
{
labels = g.Key, // DistinctなName
data = g.Sum(x => x.Amount) // Distinctされた部分のAmountの合計
})
.ToList();
// ラベルとデータを分離
var xlabels = xData.Select(x => x.labels).ToList();
var xdata = xData.Select(x => x.data).ToList();
var chartData = new
{
labels = xlabels,
data = xdata //mydata
};
//ViewBag.Labels = xlabels;
//ViewBag.Data = xdata; //左記2つのViewBagを使用してもチャートが作成できる。
// ビューにデータを渡す
return View(chartData);
--------------------------------------------------------------------------------------------------------------------------------------------
Viewのコード
<div class="row">
<div class="col-md-6">
<h1>ド―ナツチャートで表示</h1>
<div style="width: 50%; margin: auto;">
<canvas id="myPieChart"></canvas>
</div>
</div>
<div class="col-md-6">
<h1>棒チャートで表示</h1>
<h4>@ViewBag.TotalAmount</h4>
<div style="width: 100%; margin: auto;">
<canvas id="myBarChart"></canvas>
</div>
</div>
</div>
<hr />
<script>
// サーバーから渡されたデータを取得
const chartData = @Html.Raw(Json.Serialize(Model))
// Chart.jsで円グラフを描画
const ctx = document.getElementById('myPieChart').getContext('2d');
new Chart(ctx, {
type: 'doughnut', // 円グラフ
data: {
labels: chartData.labels, // ラベル
datasets: [{
data: chartData.data, // データ
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(255,20,147,0.2)',
'rgba(0,255,255,0.2)',
// 'rgba(189,183,107,0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(255,20,147,1)',
'rgba(0,255,255,1)',
// 'rgba(189,183,107,0.1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
// tooltip:{
// callbacks:{
// label: function(tooltipItem){
// return tooltipItem.label + ';' + tooltipItem.row + '%';
// }
// }
// }
}
}
});
const ctx1 = document.getElementById('myBarChart').getContext('2d');
new Chart(ctx1, {
type: 'bar', // 円グラフ
data: {
labels: chartData.labels, // ラベル
datasets: [{
axis: 'y',
label: '家計簿',
data: chartData.data, // データ
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(255,20,147,0.2)',
'rgba(0,255,255,0.2)',
// 'rgba(189,183,107,0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(255,20,147,1)',
'rgba(0,255,255,1)',
// 'rgba(189,183,107,0.1)'
],
borderWidth: 1
}]
},
options: {
responsive: true,
plugins: {
legend: {
position: 'top',
},
options: {
indexAxis: 'y',
}
// tooltip:{
// callbacks:{
// label: function(tooltipItem){
// return tooltipItem.label + ';' + tooltipItem.row + '%';
// }
// }
// }
}
}
});
</script>
--------------------------------------------------------------------------------------------------------------------------------
ViewBagをデータに利用する場合のscript
// Chart.jsで円グラフを描画
const ctx = document.getElementById('myPieChart').getContext('2d');
new Chart(ctx, {
type: 'doughnut', // 円グラフ
data: {
labels: @Html.Raw(Json.Serialize(ViewBag.Labels)), // ラベル
datasets: [{
data: @Html.Raw(Json.Serialize(ViewBag.Data)), // データ
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
Powered by Froala Editor
 - 
        
添付画像
 - 
            
     - Genreのカテゴリ-名
 - Controllers