min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

ChatGPT「Chart.jsでoptionsの記述を例えば var=myOPTIONS みたいに外出ししたとして、optionsの中のfontsizeを、関数の引数として受け取って、都度変更することはできるだろうか?」

ハピタス登録で1,000円分になるURL

その買うを、もっとハッピーに。|ハピタス

 

このグラフ

仮に「看護師等ALL」を選択したらY軸(左)の目盛りを500人にしたいとしよう。

 

つまりこうしたいのよ。Y軸を500人にしたいの。

コロナ禍では看護師の人手が足りなくて働いて欲しい企業(青色棒グラフ=求人)が多いから棒グラフの高さは500人にしたいわけだ。

 

これをChart.jsで設定するにはどうしたらいいのか?Googleで調べたら1日作業だっただろう。しかしChatGPTだと1秒で答えに辿り着く。

 

こんな複雑な質問までイッパツで的確解答

Chart.jsでoptionsの記述を例えば var=myOPTIONS みたいに外出ししたとして、optionsの中のfontsizeを、関数の引数として受け取って、都度変更することはできるだろうか?

うはぁ!すげぇ!

グラフの中のfontsizeをこうやって指定できるということは、それをY軸の高さmaxに読み換えれば、自由に高さ指定できるってことだ!

 

さらに質問

function drawChart(fontsize)  のところで、fontsizeが仮に何も指定されてなかったらエラーになる?

 

さっそくコードに反映してみる。

Chart.jsのY軸の高さを自由に変更する設定

301行目で設定したY軸(左)の高さy1maxとY軸右)の高さmax2 を

313行目と314行目G_OPTION2 変数に渡す

324行目の options: の記述でそれが G_OPTION2 変数の中に展開されて…

477行目の G_OPTION2 の中の

557行目 scales

558行目  y1 の中の

567行目  min の項目(Y軸の高さ)

を書き換えるという動作をする!

 

もっかい見比べ

こう(312行目)書く

ここ(567行目)に入るよ、と。

覚えた。

 

コピペ用

<!DOCTYPE html>
<HTML lang="ja">
<HEAD>
    <meta charset="utf-8">
    <title>08js職業別求人・求職バランスシート(時系列)</title>

<style>
.box select{
/* width: 100px;
width: 500px; 
height: 50px */
border: 1px solid;
font-size: 30px;
}

/* ChatGPT
プルダウンメニューで、各選択肢の文字数が異なる場合、文字列が長い選択肢は左寄せに表示され
、短い選択肢は右寄せに表示されます。これを中央揃えにするには、CSSを使用してテキストの中>央揃えを設定する必要があります。
*/
select {
      text-align-last: center;
        text-align: center;
}
option {
      text-align: center;
}
</style>


<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.0/chart.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/chartjs-plugin-datalabels@2.0.0"></script>


<div style="width:100%">
    <canvas id="canvas"></canvas>
</div>

<hr>
<div class="box" align="right">
<label for="csv-select">対象</label>
<select id="csv-select" onchange="myFunction()">
    <option value="merged_24うちIT関連職業_秋田_2019.csv">うちIT2019</option>
    <option value="merged_24うちIT関連職業_秋田_2020.csv">うちIT2020</option>
    <option value="merged_24うちIT関連職業_秋田_2021.csv">うちIT2021</option>
    <option value="merged_24うちIT関連職業_秋田_2022.csv" selected>うちIT2022</option>
    <option value="merged_24うちIT関連職業_秋田.csv">うちITALL</option>
    <option value="merged_3看護師保健師等_秋田.csv">看護師等ALL</option>
    <option value="merged_test_3看護師保健師等_4能代.csv">看護師保健師ALL(能代)</option>
</select>

<!-- mergedではとりあえずドロップダウン選択項目は不要
<select id="csv-select2" onchange="myFunction2()">
    <option value="201903_000425650_看護師保健師等.csv">2019年03月 看護師保健師等</option>
    <option value="202212_001367794_看護師保健師等.csv" selected>2022年12月 看護師保健師
等</option>
</select>
</div>
<p></p>
<div class="box" align="center">
<select id="csv-select" onchange="myFunction()">
    <option value="202210_001312912_うちIT関連職業.csv">2022年10月 うちIT関連職</option>
    <option value="202211_001338172_うちIT関連職業.csv">2022年11月 うちIT関連職</option>
    <option value="202212_001367794_うちIT関連職業.csv" selected>2022年12月 うちIT関
連職</option>
</select>
-->


<!--
<button id="load-csv-button">Load CSV</button>
-->
</div>
<a href="myKINRIROUKI01_24うちIT関連職業dir/myKINRIROUKI04merge_秋田_24うちIT関連職>業_00全体.png" target="_blank">myKINRIROUKI04merge_秋田_24うちIT関連職業_00全体.png</a>
<hr>
<a href="https://wordpress.kazunoriri.com/https-kazunoriri-com-wordpress-chart-js-bar-csv/" target="_blank">WordPress | CSVを読み込んでChart.jsの棒グラフを描画する方法</a>
<br />
<a href="https://qiita.com/saka212/items/5714fa68deb44a185ec3">Chart.jsでグラフを更新す>るサンプル(ボタンをクリック)</a>
<!--
キャラ,HP,MP,ちから,すばやさ
ヨシヒコ,330,200,150,90
アリーナ,300,0,200,220
マーニャ,230,300,40,130j
ミネア,240,170,80,80

↓今回のmyKINRIROUKI08js.htmlが扱うCSVはこっち( merged.*csv)
#merged_csv の荷姿(koumokuは全て同じ(秋田)で、YEARMMが違う)
koumoku,YEARMM,JOBB,求人数,求職者数,求人倍率,一般求人数,一般求職者数,一般求人倍率,パート
求人数,パート求職者数,パート求人倍率
秋田,202001,うちIT関連職業,132,177,0.75,123,149,0.83,9,28,0.32
秋田,202002,うちIT関連職業,132,181,0.73,121,154,0.79,11,27,0.41

↓これはmyKINRIROUKI06js.html
koumoku,YEARMM,JOBB,求人数,求職者数,求人倍率,一般求人数,一般求職者数,一般求人倍率,パート
求人数,パート求職者数,パート求人倍率

↓これはmyKINRIROUKI06js.html
koumoku,YEARMM,JOBB,求人数,求職者数,求人倍率,一般求人数,一般求職者数,一般求人倍率,パート
求人数,パート求職者数,パート求人倍率
秋田労働局,202212,うちIT関連職業,497,433,1.15,435,357,1.22,62,76,0.82
秋田,202212,うちIT関連職業,172,175,0.98,153,138,1.11,19,37,0.51
男鹿,202212,うちIT関連職業,7,9,0.78,2,6,0.33,5,3,1.67
能代,202212,うちIT関連職業,49,17,2.88,49,15,3.27,0,2,0
大館,202212,うちIT関連職業,46,20,2.30,43,14,3.07,3,6,0.50
鷹巣,202212,うちIT関連職業,6,9,0.67,6,8,0.75,0,1,0
大曲,202212,うちIT関連職業,41,23,1.78,33,18,1.83,8,5,1.60
角館,202212,うちIT関連職業,9,9,1.00,5,8,0.63,4,1,4.00
本荘,202212,うちIT関連職業,60,107,0.56,55,101,0.54,5,6,0.83
横手,202212,うちIT関連職業,57,24,2.38,39,17,2.29,18,7,2.57
湯沢,202212,うちIT関連職業,30,31,0.97,30,25,1.20,0,6,0
鹿角,202212,うちIT関連職業,20,9,2.22,20,7,2.86,0,2,0
-->

<script>
// window.onload = function() {
// window.onload = loadCsv('sample2.csv');
// window.onload = loadCsv('merged_sample4.csv');
window.onload = loadCsv('merged_24うちIT関連職業_秋田_2022.csv');
// document.addEventListener("DOMContentLoaded", function() {
//     // ここに実行したい関数のコードを記述する
//     console.log("This function will run only once when the HTML page is loaded.");
//     loadCsv('sample2.csv');
// });

//@ // csv-selectまたはchartTitle2が変更された場合に、グラフのタイトルを更新する
//@ document.getElementById("csv-select").addEventListener("select", () => {
//@     console.log("Im title1");
//@     myChart.options.plugins.title.text = document.getElementById("csv-select").value;
//@     myChart.update();
//@ });
//@ 
//@ document.getElementById("csv-select2").addEventListener("select", () => {
//@     myChart.options.plugins.title.text = document.getElementById("csv-select2").value;
//@     myChart.update();
//@ });


function myFunction() {
    const selectedValue = document.getElementById('csv-select').value;
    if(myChart) {
        myChart.destroy();
    }
    loadCsv(selectedValue);
    //@ csv-selectまたはchartTitle2が変更された場合に、グラフのタイトルを更新する
    // グラフのタイトル更新
    // myChart.options.plugins.title.text = document.getElementById("csv-select").value;

    // myChart.options.plugins.title.text = selectedValue;
    // myChart.update();

    //- // うちIT関連職が選択された時は、看護師保健師はグレーアウトしたい
    //- let drop1 = document.getElementById("csv-select");
    //- let drop2 = document.getElementById("csv-select2");
    //- if (drop1.value == "1"){
    //-     drop2.disabled = true;
    //- } else {
    //-     drop2.disabled = false;
    //- }
}
function myFunction2() {
    const selectedValue2 = document.getElementById('csv-select2').value;
    if(myChart) {
        myChart.destroy();
    }
    loadCsv(selectedValue2);
    // myChart.options.plugins.title.text = document.getElementById("csv-select2").value;
    // myChart.options.plugins.title.text = selectedValue2;
    // myChart.update();
}

 

 

function loadCsv(CSVV) {
    // let キャラ = ;
    // let HPのデータ =
;
    // let MPのデータ = ;
    // let ちからのデータ =
;
    // let すばやさのデータ = ;
    let col_koumoku =
;
    let col_YEARMM = ;
    let col_JOBB =
;
    let col_KYUJINSU = ;
    let col_KYUSYOKU =
;
    let col_KYUJINRITU = ;
    let col_KYUJINSU_I =
;
    let col_KYUSYOKU_I = ;
    let col_KYUJINRITU_I =
;
    let col_KYUJINSU_P = ;
    let col_KYUSYOKU_P =
;
    let col_KYUJINRITU_P = ;

    // let csvPath = './sample1.csv'
    // let csvPath = './sample2.csv';
    let csvPath = CSVV;

    // リクエストreqの定義 オブジェクトの本体req

    let req = new XMLHttpRequest();
    req.open('get', csvPath, true);                                       // 1
    req.send(null);
    req.onload = function() {                                             // 2
        makeGraphData();
        drawGraph();

        function makeGraphData() {
            // まずは改行で分ける
            let reqArray = req.responseText.split('\n');                      // 3

            // // 試しにコンソールに出す
            // console.log(reqArray[0].split(',').indexOf('YEARMM'));
            // console.log(reqArray[1].split(',').indexOf('YEARMM'));
            // console.log(reqArray[2].split(',').indexOf('YEARMM'));


            // reqArrayには
            // ヘッダデータ
            // 秋田,202212,うちIT関連職業,172,175,0.98,153,138,1.11,19,37,0.51
            // 男鹿,202212,うちIT関連職業,7,9,0.78,2,6,0.33,5,3,1.67
            // ...
            // 末尾まで が全部格納される
            
            reqArray.forEach((element) => {                                   // 4
                //  ROWW_DATA 行データ
                let ROWW_DATA = element.split(',')

                let indexYEARMM = reqArray[0].split(',').indexOf('YEARMM');
                let indexJOBB = reqArray[0].split(',').indexOf('JOBB');
                // 試しにコンソールに出す
                console.log(indexYEARMM);

                let indexKYUJINSU = reqArray[0].split(',').indexOf('求人数');
                let indexKYUSYOKU = reqArray[0].split(',').indexOf('求職者数');
                let indexKYUJINRITU = reqArray[0].split(',').indexOf('求人倍率');

                let indexKYUJINSU_I = reqArray[0].split(',').indexOf('一般求人数');
                let indexKYUSYOKU_I = reqArray[0].split(',').indexOf('一般求職者数');
                let indexKYUJINRITU_I = reqArray[0].split(',').indexOf('一般求人倍率');

                let indexKYUJINSU_P = reqArray[0].split(',').indexOf('パート求人数');
                let indexKYUSYOKU_P = reqArray[0].split(',').indexOf('パート求職者数');
                let indexKYUJINRITU_P = reqArray[0].split(',').indexOf('パート求人倍率');

                //配列にpushして突っ込んでる?
                //キャラ.push(ROWW_DATA[0]);
                col_koumoku.push(ROWW_DATA[0]);
                col_YEARMM.push(ROWW_DATA[1]);
                col_JOBB.push(ROWW_DATA[2]);

                // --- 全体
                if(ROWW_DATA[indexKYUJINSU] !== undefined) {
                    col_KYUJINSU.push(Number(ROWW_DATA[indexKYUJINSU]));
                    // 試しにコンソールに出すす
                    console.log(col_KYUJINSU);
                };
                if(ROWW_DATA[indexKYUSYOKU] !== undefined) {
                    col_KYUSYOKU.push(Number(ROWW_DATA[indexKYUSYOKU]));
                };
                if(ROWW_DATA[indexKYUJINRITU] !== undefined) {
                    col_KYUJINRITU.push(Number(ROWW_DATA[indexKYUJINRITU]));
                };

                // --- 一般
                if(ROWW_DATA[indexKYUJINSU_I] !== undefined) {
                    col_KYUJINSU_I.push(Number(ROWW_DATA[indexKYUJINSU_I]));
                };
                if(ROWW_DATA[indexKYUSYOKU_I] !== undefined) {
                    col_KYUSYOKU_I.push(Number(ROWW_DATA[indexKYUSYOKU_I]));
                };
                if(ROWW_DATA[indexKYUJINRITU_I] !== undefined) {
                    col_KYUJINRITU_I.push(Number(ROWW_DATA[indexKYUJINRITU_I]));
                };

                // --- パート
                if(ROWW_DATA[indexKYUJINSU_P] !== undefined) {
                    col_KYUJINSU_P.push(Number(ROWW_DATA[indexKYUJINSU_P]));
                };
                if(ROWW_DATA[indexKYUSYOKU_P] !== undefined) {
                    col_KYUSYOKU_P.push(Number(ROWW_DATA[indexKYUSYOKU_P]));
                };
                if(ROWW_DATA[indexKYUJINRITU_P] !== undefined) {
                    col_KYUJINRITU_P.push(Number(ROWW_DATA[indexKYUJINRITU_P]));
                };
            });
            removeHeader()

            function removeHeader() {
            //このremoveやらないと、csvのヘッダ部分koumkou文字列そのものが棒グラフの一番
左に出ちゃう
                // --- 全体
                col_koumoku.shift();
                col_YEARMM.shift();
                col_JOBB.shift();
                col_KYUJINSU.shift();
                col_KYUSYOKU.shift();
                col_KYUJINRITU.shift();
                // --- 一般
                col_KYUJINSU_I.shift();
                col_KYUSYOKU_I.shift();
                col_KYUJINRITU_I.shift();
                // --- パート

                col_KYUJINSU_P.shift();
                col_KYUSYOKU_P.shift();
                col_KYUJINRITU_P.shift();
                // キャラ.shift();
                // HPのデータ.shift();
                // MPのデータ.shift();
                // ちからのデータ.shift();
                // すばやさのデータ.shift();
            };
        };

        function drawGraph(y1max=300,y2max=1.5) {
            let ctx = document.getElementById('canvas').getContext('2d');

            /// Y軸の高さを関数の引数として受け取るChatGPTで実現 20220226
            /// G_OPTION2.scales.y1.ticks.font.size = 30;
            /// G_OPTION2.scales.y1.max = 500;
            // if(document.getElementById("csv-select").value === 'merged_3看護師保健師>等_秋田.csv') {
            myCsvValue = document.getElementById("csv-select").value;
            console.log(myCsvValue);
            // if(myCsvValue === 'merged_3看護師保健師等_秋田.csv') {
            if(myCsvValue.match(/merged.*看護師保健師等.*csv/)) {
                // G_OPTION2.scales.y1.max = y1max;
                G_OPTION2.scales.y1.max = 500;
                G_OPTION2.scales.y2.max = 10;
            }

            // let グラフ = new Chart(ctx, {
            // myGraph
            // var myG = new Chart(ctx, {
            // optionsドロップダウン選択時にmyChart.destroy必須
            window.myChart = new Chart(ctx, {
                type: 'bar',    // ここはbarのままにする2軸でも
                data: G_DATA,
                options: G_OPTION2,
                plugins: [
                    ChartDataLabels,
                ],

                // data: グラフのデータ,
                // options: グラフのオプション
                // options: G_OPTION
            });

        };

    };

    // var グラフのデータ = {
    var G_DATA = {
        // labels: キャラ,

        // ↓このlabelsでX軸の単位(秋田,男鹿,能代...)が描画される
        // labels: col_koumoku,
        // ↓今回myKINRIROUKI08js.htmlではkoumokuは全て同じ(秋田に統一)で、YEARMM(年月
)が数年分ある
        labels: col_YEARMM,
        datasets: [
            // {
            //     //label: 'HP',
            //     label: 'col_koumoku',
            //     // data: HPのデータ,
            //     data: col_koumoku,
            //     borderColor     : "rgba(55,155,255,0.7)",
            //     backgroundColor : "rgba(55,155,255,0.5)",
            // },
            //% 積み上げにより「一般+パート」の合計値=全体(の棒の高さ)が分かるから
            //% 「全体」の棒は不要となる → 折れ線グラフlineだけは表示させる
            //% /// --- 全体
            //% {
            //%     //stack: 'kasane-left',   //3本の棒グラフの左端に積み上げる←全体は積
み上げない!
            //%     type: 'bar',
            //%     label: '求人数',
            //%     // label: 'col_KYUJINSU',
            //%     data: col_KYUJINSU,
            //%     borderColor     : "rgba(0,0,255,0.7)",
            //%     backgroundColor : "rgba(0,0,255,0.5)",
            //%     // borderColor     : "rgba(255,100,133,0.7)",
            //%     // backgroundColor : "rgba(255,100,133,0.5)",
            //%     // 左軸に表示
            //%     yAxisID: "y1",
            //%     // yAxisID: "y-axis-1",
            //%     // https://hotay-blog.com/codeigniter4-chartjs3x/
            //%     // yAxisIDとyAxesIDの記述は、yAxisIDが正しい
            //%     // yAxesIDだと、棒グラフの方が正しく表示されない
            //% },
            //% {
            //%     // stack: 'kasane-right',
            //%     type: 'bar',
            //%     label: '求職者数',
            //%     data: col_KYUSYOKU,
            //%     borderColor     : "rgba(255,0,0,0.7)",
            //%     backgroundColor : "rgba(255,0,0,0.5)",
            //%     // borderColor     : "rgba(55,255,55,0.7)",
            //%     // backgroundColor : "rgba(55,255,55,0.5)",
            //%     yAxisID: "y1",
            //% },
            //% 「全体」折れ線グラフlineだけは表示させる
            {
                type: 'line',
                label: '求人倍率(右軸)',
                data: col_KYUJINRITU,
                borderColor     : "rgba(0,0,255,0.7)",

                // borderColor     : "rgba(254,128,255,0.3)",
                // borderColor     : "rgba(255,222,133,0.7)",
                //backgroundColor : "rgba(255,222,133,0.3)",
                backgroundColor     : "rgba(0,0,255,0.7)",
                tension: 0, //0なら直線、0.1以上は曲線
                fill: false, //直線からX軸までの範囲を塗りつぶすならtrue
                // 右軸に表示
                yAxisID: "y2",
                // pointRadius: 5,
                // pointHoverRadius: 7,
                // pointBackgroundColor: 'white',
                // pointBorderColor: 'rgb(75, 192, 192)',
                // pointHoverBackgroundColor: 'rgb(75, 192, 192)',
                // pointHoverBorderColor: 'white',
            },
            /// --- 一般(正規)
            {
                //2本の棒グラフ(求人数,求職者数)の左端に積み上げる
                stack: 'kasane-left',
                type: 'bar',
                label: '一般求人数',
                // label: 'col_KYUJINSU_I',
                data: col_KYUJINSU_I,
                borderColor     : "rgba(0,125,255,0.7)",
                backgroundColor : "rgba(0,125,255,0.5)",
                // 左軸に表示
                yAxisID: "y1",
            },
            {
                stack: 'kasane-right', //
                type: 'bar',
                label: '一般求職者数',
                data: col_KYUSYOKU_I,
                borderColor     : "rgba(255,125,0,0.7)",
                backgroundColor : "rgba(255,125,0,0.5)",
                yAxisID: "y1",
            },
            {
                type: 'line',
                label: '一般求人倍率(右軸)',
                data: col_KYUJINRITU_I,
                borderColor     : "rgba(181,255,20,1)",
                backgroundColor : "rgba(181,255,20,1)",
                tension: 0, //0なら直線、0.1以上は曲線
                fill: false, //直線からX軸までの範囲を塗りつぶすならtrue
                // 右軸に表示
                yAxisID: "y2",
            },
            /// --- パート
            {
                //2本の棒グラフ(求人数,求職者数)の左端に積み上げる
                stack: 'kasane-left',

                type: 'bar',
                label: 'パート求人数',
                // label: 'col_KYUJINSU_P',
                data: col_KYUJINSU_P,
                borderColor     : "rgba(0,0,100,0.7)",
                backgroundColor : "rgba(0,0,100,0.5)",
                // 左軸に表示
                yAxisID: "y1",
            },
            {
                stack: 'kasane-right',
                type: 'bar',
                label: 'パート求職者数',
                data: col_KYUSYOKU_P,
                borderColor     : "rgba(192,125,0,0.7)",
                backgroundColor : "rgba(192,125,0,0.5)",
                yAxisID: "y1",
            },
            {
                type: 'line',
                label: 'パート求人倍率(右軸)',
                data: col_KYUJINRITU_P,
                borderColor     : "rgba(0,0,100,0.5)",
                backgroundColor : "rgba(0,0,100,0.5)",
                tension: 0, //0なら直線、0.1以上は曲線
                fill: false, //直線からX軸までの範囲を塗りつぶすならtrue
                // 右軸に表示
                yAxisID: "y2",
            },
        ],
    };

    // const G_OPTION2 = {
    // Chart.jsのVer2→3でyAxesの書き方が大きく変わった
    var G_OPTION2 = {
        responsive: true,
        plugins: {
            title:{
                display: true,
                // text: '職業別求人・求職バランスシート',
                text: '職業別求人・求職バランスシート ' + CSVV,
                font: {
                    size: 20
                },
            },
            datalabels: {
                // 項目ラベルの位置を指定
                // anchor: 'end',
                anchor: 'center',
                align: 'end',
                offset: 4,
                position: 'top',

                // 項目ラベルのフォントサイズはここ
                font: {
                    size: 20
                },
                formatter: function( value, context ){
                    return value.toString();
                }
            },
            legend: {
                labels: {
                    font:{
                        // コレ変えると凡例のフォントサイズが変わる
                        size: 14
                    }
                }
            },
            //== 折れ線グラフのフォントだけ大きくしたい
            //= afterDatasetsDraw: function(chart, easing, options) {
            //=     const ctx2 = chart.ctx2;
            //=     chart.data.datasets.forEach(function (dataset, i) {
            //=         const meta = chart.getDatasetMeta(i);
            //=         meta.data.forEach(function (bar, index) {
            //=             const data = dataset.data[index];
            //=             ctx2.fillStyle = 'black';
            //=             ctx2.font = '20px Arial';
            //=             ctx2.textAlign = 'center';
            //=             ctx2.fillText(data, bar.x, bar.y - 10);
            //=         });
            //=     });
            //= },
            //
            //- labels: {
            //-     display: true
            //- },
            //- datalabels: {
            //-     anchor: 'end',
            //-     align: 'top',
            //-     font: {
            //-         weight: 'bold'
            //-     },
            //-     // formatter: function(value) {
            //-     //     return value;
            //-     // }
            //-     formatter: function(value, context) {
            //-         // return context.chart.data.labels[context.dataIndex];
            //-         return value;
            //-     },
            //- },
            // tooltips: {
            //     callbacks: {
            //         title: function (tooltipItem, data){
            //             return tooltipItem[0].label;

            //         },
            //         label: function (tooltipItem, data){
            //             return tooltipItem.value;
            //         }
            //     }
            // },
        },
        // Chart.js ver3 での書き方
        // http://www.kogures.com/hitoshi/javascript/chartjs/scale.html
        // https://blog.myntinc.com/2021/03/chartjs-ver3x.html
        scales: {
            y1: {
                type: "linear",
                position: "left",
                display: true,
                beginAtZero: true,
                // suggestedつけると認識されないChart.js_Ver3
                // suggestedMin: 0,
                // suggestedMax: 300,
                min: 0,
                max: 300,
                stepSize: 100,
                scaleLabel: {
                    display:true,
                    labelString:"人数",
                },
                grid: {
                    drawOnChartArea: false,
                },
                // id: "y-axis-1",
                ticks: {
                    font :{
                        // Y軸目盛り(左のN人)のフォントサイズはここで設定
                        size: 14
                    },
                    callback: function(value){
                        return value+'人';
                    },
                    // padding: -10, ←このpaddingするとY軸の目盛りが重なり気味に
                    // suggestedMax: "300",
                    // suggestedMin: "0",
                    // stepSize: 100,
                    //beginAtZero: true,
                    // max: 150,
                    // max: 300,
                    // min: 0,
                },
                // scaleLabel: {
                //     display: true,
                //     // labelString: 'あたい'
                //     labelString: '人数'
                // }

            },
            y2: {
                type: "linear",
                position: "right",
                display: true,
                beginAtZero: true,
                min: 0,
                // max: 4,
                max: 1.5,
                stepSize: 0.5,
                // id: "y-axis-1",
                ticks: {
                    font :{
                        // Y軸目盛り(右の%)のフォントサイズはここで設定
                        size: 14
                    },
                    callback: function(value){
                        return value+'%';
                    },
                    // max: "4",
                    // min: "0",
                    // stepSize: 1,
                    //beginAtZero: true,
                    // max: 150,
                    // max: 300,
                    // min: 0,
                },
                // scaleLabel: {
                //     display: true,
                //     labelString: '有効求人倍率'
                // },
                grid: {
                    drawOnChartArea: true,
                },
            },
            // y2:{
            //     // 右軸
            //     id: "y-axis-2",
            //     // type: "linear",
            //     // 右を指定
            //     position: "right",
            //     // 目盛り
            //     ticks: {
            //         beginAtZero: true,
            //         max: 4,
            //         min: 0,
            //         stepsize: 1
            //     },
            //     // Y軸の目盛り(軸ラベル)
            //     scaleLabel: {
            //         display: true,
            //         // labelString: 'あたい'

            //         labelString: '有効求人倍率'
            //     },
            //     gridLines: {
            //         display: false
            //     },
            // }  // y -----
        }
    };
};

//# <hr>
//# <select id="csv-file-list">
//#     <option value="">-- CSVファイルを選択してください --</option>
//# </select>
//# 
//# <p id="selected-csv-file"></p>
//# // そもそもjavascriptでサーバ側にあるファイルの一覧を取得することはできない!
//# document.addEventListener("DOMContentLoaded", function() {
//# // document.addEventListener("DOMContentLoaded", function() {
//#     // console.log("Im here");
//#     // const fileList = ;
//#     // const xhr = new XMLHttpRequest();
//#     // xhr.open('GET', '.');
//#     // xhr.responseType = 'document';
//#     // xhr.onload = () => {
//#     //     const files = xhr.response.querySelectorAll('a');
//#     //     for (let i = 0; i < files.length; i++) {
//#     //         const fileName = files[i].getAttribute('href');
//#     //         if(/\.csv$/i.test(fileName)) {
//#     //             console.log(fileName);
//#     //             fileList.push(fileName);
//#     //         }
//#     //     }
//#     // }
//#     // // プルダウンに選択肢を追加する
//#     // const select = document.getElementById('csv-file-list');
//#     // for (let i = 0; i < fileList.length; i++) {
//#     //     const option = document.createElement('option');
//#     //     option.value = fileList[i];
//#     //     option.text = fileList[i];
//#     //     select.add(option);
//#     // }
//#     // // プルダウンで選択されたファイルを表示する
//#     // select.addEventListener('change', (event) => {
//#     //     const fileName = event.target.value;
//#     //     document.getElementById('selected-csv-file').textContent = fileName;
//#     // });
//# 
//# 
//#     // XMLHttpRequest object
//#     var xhr = new XMLHttpRequest();
//#     // 同じ階層にあるCSVファイルの一覧を取得する

//#     xhr.open("GET", "./", true);
//#     xhr.onreadystatechange = function() {
//#         console.log("Im here");
//#         if (xhr.readyState === 4 && xhr.status === 200) {
//#             // CSVファイル一覧を取得してプルダウンに追加する
//#             var fileList = xhr.responseText.split("\n");
//#             for (var i = 0; i < fileList.length; i++) {
//#                 // myREGX = /.*csv$/g;
//#                 myREGX = /.*csv$/i;
//#                 //if (fileList[i].match(/\.csv$/)) {
//#                 if (fileList[i].match(myREGX)) {
//#                     var option = document.createElement("option");
//#                     option.text = fileList[i];
//#                     option.value = fileList[i];
//#                     document.getElementById("csv-file-list").appendChild(option);
//#                 }
//#             }
//#         }
//#     };
//#     xhr.send();
//#     
//#     // プルダウンで選択されたファイル名を表示する
//#     document.getElementById("csv-file-list").addEventListener("change", function() {
//#         var selectedFile = this.value;
//#         document.getElementById("selected-csv-file").textContent = "選択されたファイ
ル: " + selectedFile;
//#     });
//# });
//# 
//# 
//# //const list_csvv = [];
//# ////for (let i = 1; i<=12; i++){
//# //for (let j = 2019; j<=2022; j++) {
//# //    for (let i = 1; i<=12; i++){
//# //        console.log(i);
//# //        if(i < 10 ) {
//# //            const filename1 = `myKINRIROUKI03_24うちIT関連職業_00全体_${j}0${i}.csv`;
//# //            list_csvv.push(filename1);
//# //        } else {
//# //            const filename1 = `myKINRIROUKI03_24うちIT関連職業_00全体_${j}${i}.csv`;
//# //            list_csvv.push(filename1);
//# //        }
//# //    }
//# //}
//# 
//# 
//# 
//# 
//# const csvSelect = document.getElementById("csv-select");
//# // const loadCsvButton = document.getElementById("load-csv-button");

//# // const chartCanvas = document.getElementById("chart");
//# let chart = null;
//# 
//# // loadCsvButton.addEventListener("click", () => {
//# //       const selectedCsv = csvSelect.value;
//# //       console.log(selectedCsv);
//# //       loadCsv(selectedCsv);
//# // });


</script>

</HEAD>
</div>

<br><br>
</center>
</BODY>
</HTML>

 

 

 

 

 

 

その買うを、もっとハッピーに。|ハピタス