[ 前へ | 目次 | 次へ ]
Japanese English

座標値ファイル書式

ここでは、リニアングラフ3D で読み込み可能なファイルの書式(記述方法)について説明します。 ここでの書式に基づいて座標値ファイルを作成してください。

ワンポイント 表計算ソフトからは、コピー&ペーストでグラフ化できる

グラフ作成に表計算ソフトを使用する場合、値の入力されている領域を選択してコピーし、 リニアングラフ3Dの画面上で右クリックして、メニューから「Paste Data」を選ぶことで、 ファイルを作らずにそのままグラフにプロットできます。



CSV ファイルとTSV ファイル

グラフ用の座標値ファイルには、座標値を並べた数列を記述します。 このように数列をファイルに記述するには、CSV とTSV という2 つのファイル形式があります。

CSV形式
データを「,(カンマ)」で区切って並べるファイル形式です。一般にcsv という拡張子を付ける決まりがあります。
TSV形式
データをタブ空白で区切って並べるファイル形式です。こちらは特に拡張子の決まりはありません。

グラフ作成において、CSV は表計算ソフトで作成するデータなどでよく使用され、 TSV はプログラミング言語などで作成するデータなどでよく使用されます。 リニアングラフ3D では、CSV とTSV の両方に対応しています。

マトリックス書式

CSV/TSV といった区切り文字の書式の他にも、グラフ用のデータには「数列をどう並べるか」といった点について、複数の書式が存在します。

リニアングラフ3D では、一般的に広く使用されている「マトリックス書式」及び「3 カラム書式」に対応しています。 ここではまず、前者について解説します。

マトリックス書式とは

「マトリックス書式」とは、縦方向(行)をX 値、横方向(列)をY 値と見なし、 行列のようにZ 値を記載していく書式です。マトリックス書式は、表計算ソフトなどで簡単に作成可能というメリットがあります。 反面、X やY が格子状に並んだ座標しか表現できないというデメリットもあります。

以下に、表計算ソフトでマトリックス書式のファイルを作成する手順を例示します。

表計算ソフトでの作成例

まず表計算ソフトウェアを起動し、最も左上のセルを空白にしたまま、最も左側の列にX値を記述し、最も上側の行にY値を記述します。 そして、このX列とY行を辺とする長方形領域に、各X・Y に対応するZ 値を記述します。

図:表計算ソフトウェアの記述例

上図において、青い列がX 値、赤い行がY 値、緑の領域がZ 値を意味します。 上図のように記述し、ファイルをCSV(カンマ区切り)形式で保存してください(タブ区切りのTSV形式で保存しても問題はありませんが、 この書式ではCSV を推奨します)。作成されたCSV ファイルは、リニアングラフ3D で読み込む事ができ、 面プロットを含む全てのプロットオプションが使用可能です。

なお、必要が無ければX 列とY 行の記述は省略する事が可能です。 その場合はZ 値の領域(上図において緑の領域)を、最も左上のセルから詰めて記述してください。 その場合、X 値とY 値にはそれぞれ列番号と行番号が割り振られます。

複数系列の表現

リニアングラフ3D では、最も左上のセルに「 LEVEL_INDEX 」と記載すると、 複数系列が定義されたマトリックス書式として読み込まれます。このセルの左から順に、1行目に系列番号を記載します。

2 行目以降は、通常のマトリックス書式と同様です。ただし1行目に記載した系列番号により、 座標値の所属する系列が振り分けられます。系列はいくつでも使用可能です。

※なお、面プロットを使用するには、各系列においてX 及びY が昇順もしくは降順に並んでいる必要があります。

図: 複数系列におけるマトリックス書式の記述例(表計算ソフト使用)

上図において、一行目が系列番号と見なされます。系列が異なる座標値は別のグラフとして表現されます。系列の異なるデータは、グラフ化した際に別の色で彩色されます(※With RainbowオプションOFF 時)。

3カラム書式

3カラム書式とは

表計算ソフトにおいてマトリックス書式がよく使用されるのに対して、プログラミング言語を用いた分野では、 3 カラム書式がよく使用されます。3 カラム書式はファイル各行に左からX、Y、Z と記載し、1 行につき1 個の座標点を表現する書式です。

この書式は、プログラミングにより非常に効率的に作成できる事、 及びX やY が格子状に並ばない自由な座標値を表現できる事がメリットとして挙げられます。 このメリットから、表計算ソフトでのデータ作成においても使用される事があります。

3 カラム書式の例:
X1 Y1 Z1
X2 Y2 Z2
X3 Y3 Z3
… … …
X100 Y100 Z100

複数系列の表現

3 カラム形式では、空白行を挟む事により、複数のデータを一枚のファイルに記載する事が容易にできます。 リニアングラフ3D では、2 行連続した空白行をはさむと、そこが系列の区切りと見なされ、 そこ以降は別の系列に属するデータと見なされます。系列の異なるデータは、 グラフ化した際に別の色で彩色されます(※With Rainbow オプションOFF 時)。

3カラム書式で面を表現するには

面の表現書式

3 カラム書式で面を表現するには、まずY 値を固定し、X 方向に沿って端から端まで座標値を書き出してください。 そこで空白改行を1 行はさみ、Y 値を1 つ進め、またX 方向に沿って端から端まで座標値を書き出してください。 これを繰り返して面全体の座標値を書き出してください。

例として、次ページにある図のような、3×3 メッシュ上における面Z(X,Y)を表現する座標値データを以下に示します。

図:3×3の格子点(各格子点にZ値が対応)

座標値ファイルの内容:
X11 Y11 Z11
X12 Y12 Z12
X13 Y13 Z13
( 空 白 行 )
X21 Y21 Z21
X22 Y22 Z22
X23 Y23 Z23
( 空 白 行 )
X31 Y31 Z31
X32 Y32 Z32
X33 Y33 Z33

このような座標値ファイルを出力する、C++言語及びFORTRAN77 言語での簡単なプログラムを以下に例示します。

C言語でのファイル出力プログラム記述例

以下は、Z = sin( X )+cos( Y ) の曲面グラフを作成する、C言語でのプログラムの例です。

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(void) {
  
  double x, y, z;
  int xi, yi;
  int xN = 10; // X 方向の座標点数
  int yN = 10; // Y 方向の座標点数
  
  // X・Y 方向の計算範囲
  double xMin = -5.0;
  double yMin = -5.0;
  double xMax = 5.0;
  double yMax = 5.0;
  
  // 出力ファイルを開く
  FILE *fp = fopen("a.tsv", "w");
  if (fp == NULL) {
    fprintf(stderr, "failed to open the file");
    return EXIT_FAILURE;
  }
  
  for( yi=0; yi<yN; yi++ ){
    for( xi=0; xi<xN; xi++ ){
      
      x = ( xMax - xMin ) * xi / (xN-1);
      y = ( yMax - yMin ) * yi / (yN-1);
      z = sin(x) + cos(y);
      
      // 値をタブ区切りで書き出して改行
      fprintf(fp, "%lf\t%lf\t%lf\n", x, y, z);
      
    }
    fprintf(fp, "\n"); // 空白改行
  }
  
  return EXIT_SUCCESS;
}

C++でのファイル出力プログラム記述例

以下は、Z = sin( X )+cos( Y ) の曲面グラフを作成する、C++でのプログラムの例です。

#include <fstream>
#include <cstdlib>
#include <cmath>

int main(){

  double x, y, z;
  int xN = 100; // X 方向の座標点数
  int yN = 100; // Y 方向の座標点数

  // X・Y 方向の計算範囲
  double xMin = -5.0;
  double yMin = -5.0;
  double xMax = 5.0;
  double yMax = 5.0;

  // 出力ファイルを開く
  std::ofstream ofs( "a.tsv" );

  for( int yi=0; yi<yN; yi++ ){
    for( int xi=0; xi<xN; xi++ ){

      x = ( xMax - xMin ) * xi / (xN-1);
      y = ( yMax - yMin ) * yi / (yN-1);
      z = sin(x) + cos(y);

      // 値をタブ区切りで書き出して改行
      ofs<<x<<"\t"<<y<<"\t"<<z<<std::endl;
      
    }
    ofs<<std::endl; // 空白改行
  }
  ofs.close();
  return EXIT_SUCCESS;
}

VCSSLでのファイル出力プログラム記述例

以下は、Z = sin( X )+cos( Y ) の曲面グラフを作成する、VCSSLでのプログラムの例です。

import Math ;

double x ;
double y ;
double z ;

int xN = 100;  // X方向の座標点数
int yN = 100;  // Y方向の座標点数

// X・Y方向の計算範囲
double xMin = -5.0;
double yMin = -5.0;
double xMax = 5.0;
double yMax = 5.0;

int file = open ( "a.tsv", "wtsv" );  // 出力するファイル(wtsvはTSV書き込みモード)

for( int yi=0; yi<yN; yi++ ){
  for( int xi=0; xi<xN; xi++ ){

    x = ( xMax - xMin ) * i / (xN-1) ;
    y = ( yMax - yMin ) * j / (yN-1) ;
    z = sin(x) + cos(y) ;

    // X,Y,Z値をタブ区切りで書き出して改行
    writeln( file, x, y, z ) ;

  }
  writeln( file, "" ) ;  // 空白改行
}

close( file )

FORTRAN 77 でのファイル出力プログラム記述例

以下は、Z = sin( X )+cos( Y ) の曲面グラフを作成する、FORTRAN 77 でプログラムの例です。

IMPLICIT NONE

REAL*8 X,Y,Z,X_MAX,Y_MAX,X_MIN,Y_MIN
INTEGER X_I,Y_I,X_N,Y_N

X_N = 100 ! X 方向の座標点数
Y_N = 100 ! Y 方向の座標点数
X_MAX = 5.0D0 ! X 方向の計算範囲
X_MIN = -5.0D0 ! X 方向の計算範囲
Y_MAX = 5.0D0 ! Y 方向の計算範囲
Y_MIN = -5.0D0 ! Y 方向の計算範囲

OPEN(UNIT=14,FILE='a.tsv',STATUS='UNKNOWN')

DO Y_I = 0, Y_N
  DO X_I = 0, X_N

    X = (X_MAX-X_MIN)*DBLE(X_I)/DBLE(X_N-1)
    Y = (Y_MAX-Y_MIN)*DBLE(Y_I)/DBLE(Y_N-1)
    Z = SIN(X) + COS(Y)

    ! X,Y,Zをタブ区切りで書き出して改行
    WRITE(14,*) X, Y, Z

  ENDDO
  WRITE(14,*) ! 空白改行

ENDDO
CLOSE( 14 )

STOP
END


スポンサーリンク



Japanese English
この階層の目次
新しいお知らせ

リニアングラフやVCSSLの最新版をリリース、目盛りの位置や内容を自由に指定可能に!
2024-11-24 - リニアングラフ3D/2Dを更新し、自由な位置に、自由な表記内容の目盛りを描けるようになりました! 併せて、Java言語やVCSSLでの、プログラム制御用APIも拡張しています。詳細をお知らせします。

Exevalator 2.2 をリリース、TypeScript 対応によりWebブラウザ上で動作可能に
2024-10-22 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。新たに TypeScript に対応し、Webブラウザ上での式計算にも使えるようになりました。詳細を解説します。

アシスタントAI作成の舞台裏(その2、作成編)
2024-10-12 - アシスタントAIの作成方法解説の後編です。実際にChatGPTの「GPTs」機能を用いて、アシスタントAIを作成する手順や、独自の知識をもたせたり、精度を出すためのノウハウなどを解説しています。

アシスタントAI作成の舞台裏(その1、基礎知識編)
2024-10-07 - アシスタントAI作成方法解説の前編です。今回はまず、アシスタントAIを作る前に抑えておきたい、基礎知識を延々と解説しています。そもそもLLM型AIとはどんな存在か? RAGとは何か? 等々です。

ソフトの利用をサポートしてくれるアシスタントAIを提供開始!
2024-09-20 - RINEARN製ソフトの使い方の質問応答や、一部作業のお手伝いをしてくれる、アシスタントAIを提供開始しました。ChatGPTアカウントさえあれば、誰でも無料で使用できます。使い方を解説します。

Exevalator 2.1 をリリース、新たに Visual Basic に対応
2024-07-28 - オープンソースの式計算ライブラリ「Exevalator(エグゼバレータ)」の2.1をリリースしました。今回から、新たに Visual Basic(VB.NET)でも使用できるようになりました。詳細を解説します。

関数電卓 RINPn(りんぷん)、Esc キーで計算式の一発クリアが可能に
2024-07-20 - 関数電 RINPn の Ver.1.0.2 をリリースしました。今回から、キーボードの「 Esc 」キーを押すと、入力中の計算式を一発でクリアできるようになりました。詳細を解説します。

Exevalator 2.0 をリリース、互換性に注意が必要なバグ修正が 1 件
2024-07-14 - オープンソースの式計算ライブラリ「Exevalator (エグゼバレータ)」の2.0をリリースしました。今回の更新では、互換性に注意を要する 1 件のバグ修正があります。詳細を解説します。

各ソフトウェアをアップデート、リニアングラフのコマンド拡張やVCSSLの英語対応など
2024-02-05 - 各ソフトの一斉アップデートの内容をお知らせします。今回は、リニアングラフのコマンド機能を大幅拡張したのがメインです。また、VCSSLのメッセージ類の英語対応も行いました。

Vnano の Ver.1.1 で実装した反復計算高速化の内側
2024-01-17 - 前回のお知らせ記事の続編です。スクリプトエンジン Vnano の Ver.1.1 において実施した高速化を、エンジン内部の実装面から掘り下げて解説します。