はじめに
質問をいただきましたので、ScottPlotでX軸(横軸)を日付と時間にする方法について解説していきたいと思います。
- ScottPlotでX軸に日時を使用する方法
- 実行時のグラフ
- 全体コード
- コードのポイント
- 月間や週間など、長期間の時系列のデータを分かりやすく表示することが出来ます。
ScottPlotについて
ScottPlotって何?どう使うの?という方は、先に以下の記事をご覧ください。
先日メジャーアップデートされてVer4.0系から4.1系に更新されました。
Ver.4.1の注目点などについては、以下をご覧ください。
環境
この記事は以下の環境で作成と動作確認を行っています。
環境 | バージョンなど | 備考 |
VisualStudio | 2019 Community | 2017でも使用できます |
.NET | 4.7.2 | |
プロジェクト | Formアプリケーション(.NET Framework) | |
ScottPlot | 4.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円程度で返金保証あり。視聴期間も無制限なので「自分のペースでコスパ良くスキルアップしたい」「失敗したくない」とお悩み方におすすめです。
質問・要望 大歓迎です
「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。
使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。