記事詳細


投稿日
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"&gt;</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

添付画像

Current Image
Genreのカテゴリ-名
Controllers
編集 | 記事一覧