C#

【C#】ScottPlot X軸を日時にする方法

はじめに

質問をいただきましたので、ScottPlotでX軸(横軸)を日付と時間にする方法について解説していきたいと思います。

この記事の内容
  • ScottPlotでX軸に日時を使用する方法
  • 実行時のグラフ
  • 全体コード
  • コードのポイント

こんなことに使える
  • 月間や週間など、長期間の時系列のデータを分かりやすく表示することが出来ます。

ScottPlotについて

ScottPlotって何?どう使うの?という方は、先に以下の記事をご覧ください。

先日メジャーアップデートされてVer4.0系から4.1系に更新されました。
Ver.4.1の注目点などについては、以下をご覧ください。

環境

この記事は以下の環境で作成と動作確認を行っています。

環境バージョンなど備考
VisualStudio   2019 Community 2017でも使用できます
.NET4.7.2
プロジェクトFormアプリケーション(.NET Framework) 
ScottPlot4.1.16

実行結果

後述するコードを実行すると、以下のようにX軸を日付と時間にしたグラフが表示されます。

全体ソース

前述した、X軸を日付と時間にしたグラフを作成するコードは以下の通りです。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace FormScottPlot41_req_datetime
{
    public partial class Form1 : Form
    {
        // ScottPlotのコントロール(FormsPlot1)が
        // Formに追加されていることを前提にしています。

        public Form1()
        {
            InitializeComponent();

            // 基準の日時用に現在日時を取得します
            DateTime baseDt = DateTime.Now;

            // 日付情報格納用配列です
            DateTime[] dtArray = new DateTime[10];

            // X,Y用のデータ配列です
            double[] pointX = new double[10];
            double[] pointY = new double[10];

            for ( int i=0; i<dtArray.Length; i++ )
            {
                // 基準の日時 + 1分の日時を生成します
                DateTime tempDt = baseDt.AddMinutes(i);

                // 生成した日時をDouble型に変換します
                pointX[i] = tempDt.ToOADate();

                // Y軸用のデータ配列に格納します
                pointY[i]  = i;
            }

            // ポイントと日時を散布図にセットします
            formsPlot1.Plot.AddScatter(pointX, pointY);

            // X軸を日付とするように、設定します
            formsPlot1.Plot.XAxis.DateTimeFormat(true);

            // グラフを描画します
            formsPlot1.Render();

        }
    }
}

コードのポイント

ScottPlotでは日時の情報はDouble型として扱う必要があるので、DateTime型のToOAData()を使ってDateTime型 から Double型に変換します。

     // 生成した日時をDouble型に変換します
     pointX[i] = tempDt.ToOADate();


Doubleに変換した、X軸の日時データ(pointX) を散布図にセットします。
そのままだと、通常のDoubleとして扱われてしまうので、XAxis.DateTimeFormat(true)でDoubleの数値が日時であることを設定します。

            // ポイントと日時を散布図にセットします
            formsPlot1.Plot.AddScatter(pointX, pointY);

            // X軸を日付とするように、設定します
            formsPlot1.Plot.XAxis.DateTimeFormat(true);

「文字列型の日時を設定したい場合は?

文字列型 から DateTime型に変換します。
その後、前述のToOAData()を使用すれば、Double型として扱うことができます。

string dateStr = "2018/05/01 12:34:56";
 
DateTime date = DateTime.Parse(dateStr);

まとめ

ScottPlotでX軸(横軸)を日付と時間にする方法について解説しました。
「yana」さん、ご質問ありがとうございました。参考になればうれしいです。

自分でコードを打つ時間がない時は

『自分でやるには時間がない、でも頼める人もいない』と悩んでいるあなたに「ココナラ」があります。

登録者数は約200万。専門家・フリーランスも多く、制作サンプルやレビューを見て自分にあった人を選ぶことができます。特に人気の「Python」なら絶対数が多いので「デキる人」も見つけやすいです。登録は無料なのでどんな人・チームがいるか確認してみてください。

(HP製作・動画製作・面倒な業務文書の作成代行も依頼もできますよ)

1分以内に完了!無料会員登録はこちら

UdemyでC#のスキルを上げる

C#のスキルを上げるには、Udemyの動画講座がおすすめです。「C#で読みやすいコードを書く50の方法」「保守性の高いコードの書き方」など、脱初心者/スキルアップのための講座が公開されています。

1講座 2440円程度で公開されており、返金保証あり。視聴期限もないので自分のペースで仕事のスピードや評価のUPのための力をつけことができます。

書籍を買うのもいいですが、同額の値段で「動画講座」でもスキルを磨いてみてください。きっと費用対効果の高い自己投資になります。

以下のリンクはC#講座の一覧です。

⇒ C#の講座一覧をみる


応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。