C#

【質問回答】ScottPlot Ver.4.1.58 で 拡大・縮小を制限する方法

はじめに

ScottPlotの「Ver. 4.1.58」で、拡大・縮小を制限する方法を解説します。

以前の記事で旧バージョン(4.0系)で、AxisBoundsを使う方法を解説していましたが、4.1系のバージョンアップの中で、InnerViewLimit/OuterViewLimitを使う方法に変わったようです。

コメントにて「Ver.4.1.58」で拡大を限定する方法を質問いただいたので、今回は2022年10月時点での最新バージョンである、「Ver.4.1.58」で拡大・縮小を限定する方法を解説したいと思います。

※ 『きいち』さん、質問いただきありがとうございます!

環境

この記事は以下の環境で作成しています。

環境 バージョン 備考
VisualStudio 2019
.NET Framework 4.7.2
ScottPlot 4.1.58
Windows 11 10でもOKです。

※ ScottPlotのインストール方法はこちらの記事をご覧ください。

bookfan 1号店 楽天市場店
¥1,980 (2022/11/19 22:15時点 | 楽天市場調べ)

プログラミングのトレンドを知るには雑誌が最適です

プログラム概要

今回のプログラムの概要は以下の通りです。

  • 散布図の設定をする
  • 拡大(Zoom in ) の制限を設定する
  • 縮小(Zoom out ) の制限を設定する
  • グラフを描画する。

実行結果

後述するコードを実行すると、以下のようにScottPlotで拡大・縮小を制限することができます。

ScottPlotで拡大・縮小を制限するコードの実行結果のgif

全体コード

全体コードは以下の通りです。詳細な内容は後述する「コードのポイント」で解説します。

※デザイナでScottPlotのコントロール「formsPlot1」を作成してください。

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 WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();

            // サンプル用のデータです。
            double[] pointX = { 1.0, 2.0, 3.0, 4.0, 5.0 };
            double[] pointY = { 1.0, 2.0, 3.0, 4.0, 5.0 };

            // ポイントデータを散布図にセットします
            formsPlot1.Plot.AddScatter(pointX, pointY, label: "ラベル");

            // タイトルを設定します
            formsPlot1.Plot.Title("拡大・縮小の制限");

            // 拡大した時の目盛の最大・最小を設定します
            formsPlot1.Plot.SetInnerViewLimits(xMin: -2.5, xMax: 10, yMin: -2.5, yMax: 10);

            // 縮小した時の目盛の最大・最小を設定します
            formsPlot1.Plot.SetOuterViewLimits(xMin: -100, xMax: 100, yMin: -100, yMax: 100);

            // Legend(凡例)の表示を指定します。
            formsPlot1.Plot.Legend();

            // ScottPlotのコントロールにグラフを描画(表示)します。
            formsPlot1.Render();

        }
    }
}

コードのポイント

散布図の設定

Plot.AddScatter関数で散布図にポイントデータ、ラベル名称を設定します。Titleに文字列を設定することで、グラフ上にタイトルを表示できます(日本語もOK)。

// サンプル用のデータです。
double[] pointX = { 1.0, 2.0, 3.0, 4.0, 5.0 };
double[] pointY = { 1.0, 2.0, 3.0, 4.0, 5.0 };

// ポイントデータを散布図にセットします
formsPlot1.Plot.AddScatter(pointX, pointY, label: "ラベル");

 // タイトルを設定します
formsPlot1.Plot.Title("拡大・縮小の制限");

拡大(Zoom in)の制限を設定する

Plot.SetInnerViewLimits関数で拡大時の制限を設定します。引数の「xMin」「xMax」「yMin」「yMax」は、拡大時の軸の以下の値に対応しており、指定した値以下の拡大を制限します。

拡大を制限する関数の引数の意味を説明する画像
            // 拡大した時の目盛の最大・最小を設定します
            formsPlot1.Plot.SetInnerViewLimits(xMin: -2.5, xMax: 10, yMin: -2.5, yMax: 10);

縮小(Zoom out)の制限を設定する

Plot.SetOuterViewLimits関数で縮小時の制限を設定します。引数の「xMin」「xMax」「yMin」「yMax」は縮小時の以下の値に対応しており、指定した値以上の縮小を制限します。

縮小を制限する関数の引数の意味を説明する画像
// 縮小した時の目盛の最大・最小を設定します
formsPlot1.Plot.SetOuterViewLimits(xMin: -100, xMax: 100, yMin: -100, yMax: 100);

散布図を表示する

凡例を表示し、グラフを描画します。

// Legend(凡例)の表示を指定します。
formsPlot1.Plot.Legend();

// ScottPlotのコントロールにグラフを描画(表示)します。
formsPlot1.Render();

まとめ

ScottPlotの最新バージョン「4.1.58」で、拡大・縮小の範囲を制限する方法について解説しました。公式のCookBookには載っておらず、関数名のみFAQに書かれていたため、使い方は挙動から調べてみました。

拡大・縮小はほぼ制限できそうですが、移動(右ドラッグ)は少々怪しげなので、運用上で回避する必要があるかもしれません。

参考になればうれしいです。

【おすすめ】UdemyでC#のスキルを上げる

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

1講座 2440円程度で返金保証あり。視聴期間も無制限なので「自分のペースでコスパ良くスキルアップしたい」「失敗したくない」とお悩み方におすすめです。

⇒ C#の講座一覧はこちら
icon

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

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

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

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

POSTED COMMENT

  1. きいち より:

    お世話になり、ありがとうございました。
    参考にさせていただきました。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です