Up

ヒストグラムの描画

 

 図1のようなヒストグラムを描くプログラムを作成した。Visual Studio 2013などがインストールされているPCの場合、プログラムはプログラム名histogram.exeをクリックしてダウンロード・実行することができる。

図1

 

プログラムを実行すると図2のフォームが表示される。

図2

 

Go」ボタンのクリックで、まず入力データファイル名の設定を求めるダイアログボックスが表示される(図3)。

図3

 

入力データファイルはテキストファイルとして用意する。スラッシュ/で始まる行の次の行に変数のラベル並べる(図4)。変数のラベルを並べた次の行から、1行に1組のデータを書いていく。

図4

 

スラッシュで始まる行までの読み込みと、続く変数ラベルの行の読み込み、および変数の数のカウントは以下のコードで行っている。

 

         String ^s;

         while (true) {

                s = fin->ReadLine();

                if (s->Length > 0)

                        if (s[0].ToString() == "/") break;

         }

         s = fin->ReadLine();                   //              変数ラベル行の読み込み

         n_var = 0;

         String ^ck_s;

         do {

                ck_s = SeekStr( s, n_var );

                n_var++;

         } while (ck_s->Length > 0);

         n_var--;                                               //              変数の数

 

関数SeekStrは、1行の文字列から空白文字などのセパレータ区切られた文字列を取り出すものであり、以下のようなコードである。

 

        String ^ SeekStr( String ^ str, int pos ){

                String ^ vstr = "";

                array<wchar_t> ^ separator = { ' ', '\t', ',',' ','/' };               //              セパレータ用文字

                array<String ^> ^ ary_str;

                ary_str = str->Split( separator );

                int L = ary_str->Length;

                int ckp = -1;

                int tmpPos = 0;

                do {

                        if (ary_str[tmpPos]->Length > 0) ckp++;

                        tmpPos++;

                } while ((ckp != pos) && (tmpPos < L) );

                if (ckp == pos) vstr = ary_str[tmpPos-1];

 

                return vstr;

        }

 

最後のデータを書いた行の次の行はスラッシュで始めて、データの終わりであることを示す(図5)。

図5

 

最後のデータを示すスラッシュで始まる行までの読み込みとデータ数のカウントは以下のコードで行っている。

 

         n = 0;

         do{

                 s = fin->ReadLine();

                 if(s[0].ToString() == "/") break;

                 n++;

         }while(true);

         fin->Close();

 

入力ファイル名を設定後、図3のダイアログフォームの「開く」ボタンをクリックすると、図6の出力ファイル名の設定を求めるダイアログフォームが表示される。

図6

 

出力ファイルもテキストファイルである。出力ファイル名を設定して、「保存」ボタンをクリックすると、データの読み込みが始まる。読み込み後、ヒストグラム描画用のフォームが用意されるが、これは次のコードによって行っている。

 

                 cf = gcnew DrawHistogram();

                 cf->Show();

                 cf->setFormH( this, fout );

                 label1->Text = "";

                 for (int i = 0; i < n_var; i++)

                         cf->AddToCombo(v_label[i]);            //              コンボボックスに変数ラベルを設定

 

描画用フォームは図7のように表示される。

図7

 

図7の「Draw」ボタンをクリックすると図8のようにフォームの最大化後、ヒストグラムが描画される。

図8

 

画面上部に、最小値Min、第1四分位数Q1、中央値Q2、第3四分位数Q3、最大値Maxが表示されている。グラフの横軸の値をこれらに合わせて、左端の値をLower Bndryに、右端の値をUpper Bndryに設定する。階級の数(ヒストグラムの柱の数)はNumber of Intvlsに設定できる。

図9

 

上の設定後、「Draw」ボタンをクリックすると、それらの値によるヒストグラムの作成と描画が行われる(図10)。

図10

 

ヒストグラムを作成する変数はコンボボックスの右端の下向き黒三角をクリックして表示される変数ラベルのリストから選ぶことができる(図11)。

 

図11

 

描画されているヒストグラムは、「Save」ボタンのクリックで保存することができる。保存した画像は、ペイントなどで開いたりワードに読み込んだりして利用することができる。図12はペイントで開いて解説用の文字を追加したものである。

図12

 

図の下部の2本の線分の表す内容が説明されている。

 

 プログラムのソースコードファイルなどは圧縮ファイルとしてまとめた。圧縮ファイル名histogram.zipをクリックしてダウンロードすることができる。ダウンロードしたファイルは、圧縮ファイル名をマウスの右ボタンでクリックして表示されるメニュから「解凍」あるいは「展開」を選んで解凍すればVisual Studio 2013で開くことができる。

 

 Visual C++プログラミングの入門解説書<岡本安晴「大学生のための心理学VC++プログラミング入門」勁草書房>を用意している。

 統計学の基礎的考え方の解説を<岡本安晴「データ分析のための統計学入門――統計学の考え方――」おうふう>で行っている。

 

Up