C# PR

【質問回答】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のインストール方法はこちらの記事をご覧ください。

楽天ブックス
¥2,139 (2023/02/03 06:42時点 | 楽天市場調べ)

プログラム概要

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

  • 散布図の設定をする
  • 拡大(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に書かれていたため、使い方は挙動から調べてみました。

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

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

お知らせ

今月号の『Software Design』はドメイン駆動設計(DDD)。実例を交えたDDDの手法の解説が特集されています。

編集:Software Design 編集部
¥1,562 (2024/03/13 12:59時点 | Amazon調べ)

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

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

POSTED COMMENT

  1. きいち より:

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

きいち へ返信する コメントをキャンセル

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