以下に添付図面を参照して、この発明にかかるグラフ表示プログラムおよびグラフ表示方法の好適な実施の形態を詳細に説明する。なお、本明細書において、グラフとは、描画対象となるノード群と、ノード間をつなぐエッジとを含むものである。アンカーノードとは、描画対象となるノード群のうち、アンカーノード同士でつながりを持たないノードである。フリーノードとは、描画対象となるノード群のうちアンカーノードを除く残余のノードである。
(本グラフ表示手法の概要)
まず、実施の形態にかかるグラフ表示手法の概要について説明する。図1は、本グラフ表示手法の概要の一例を示す説明図である。ここでは、描画対象となるノード群を「ノード群N1〜N8」、アンカーノードを「ノードN1〜N4」、フリーノードを「ノードN5〜N8」として説明する。
(1)本手法では、描画対象となるノード群N1〜N8のうちアンカーノードN1〜N4を描画領域内の任意の点Gを中心とする同一円周上に配置する。この際、アンカーノードN1〜N4を等間隔(等角度間隔)に配置することにしてもよい。なお、点Gは、たとえば、画面上での描画領域の中心を表す点(XO,YO)である。
(2)本手法では、アンカーノードN1〜N4を両端とするパスP1〜P3上にあるフリーノードN5〜N7を描画領域内に配置する。具体的には、本手法では、フリーノードN5〜N7と他のノードとの接続関係に応じた特徴量に基づいて、描画領域内の任意の初期位置からのフリーノードN5〜N7の配置位置を算出して配置する。
ここで、特徴量とは、ノード間の距離と接続関係から導き出される値(引力、斥力など)である。また、パスとは、一のノードから他のノードに辿り着くまでの経路であって、同じエッジを2度通らない経路である。具体的には、パスP1はアンカーノードN1,N2を両端とするパス(経路)、パスP2はアンカーノードN2,N3を両端とするパス、パスP3はアンカーノードN2,N4を両端とするパスである。
(3)本手法では、パスP1〜P3上にないフリーノードN8を描画領域内に配置する。具体的には、本手法では、フリーノードN8と他のノードとの接続関係に応じた特徴量に基づいて、アンカーノードN1〜N4を頂点とする多角形(図1では正方形)の各辺h1〜h4の外側に設定された初期位置からのフリーノードN8の配置位置を算出して配置する。
(4)本手法では、上記(3)において配置されたフリーノードN8の配置位置のうち、フリーノードN8と直接つながれたフリーノードN5との間のエッジ長が最短の配置位置をフリーノードN8の配置位置に決定する。ここでは、フリーノードN5とエッジL1でつながれた配置位置がフリーノードN8の配置位置に決定される。
このように、本手法では、フリーノードN8の初期位置を、アンカーノードN1〜N4を頂点とする多角形の外側に設定することで、フリーノードN8の配置位置を調整する。具体的には、たとえば、各フリーノードN5〜N8の配置位置をノード間の接続関係に応じた特徴量から求める場合、アンカーノードN1〜N4に直接つながれたフリーノードN5〜N7は、アンカーノードN1〜N4を頂点とする多角形の内側に配置される傾向がある。
そこで、本手法では、アンカーノードN1〜N4に直接つながれていないフリーノードN8の初期位置を多角形の外側に設定することで、フリーノードN8と直接つながれていないフリーノードN6,N7が近傍に位置することを意図的に避けて、適切な配置位置を求める。これにより、画面上の描画領域において、アンカーノードN1〜N4からフリーノードN8までのエッジ数とノード間の距離とを同程度にして、グラフ全体の概観を直感的に理解し易いように表示することができる。
なお、図1の例では、描画領域が2次元の場合について説明したが、描画領域が3次元の場合は、上記(1)において、たとえば、アンカーノードN1〜N4を描画領域内の任意の点Gを中心とする同一球面上に配置することにしてもよい。
(グラフ表示装置のハードウェア構成)
つぎに、実施の形態にかかるグラフ表示のハードウェア構成について説明する。図2は、グラフ表示装置のハードウェア構成の一例を示すブロック図である。図2において、グラフ表示装置200は、CPU(Central Processing Unit)201と、ROM(Read‐Only Memory)202と、RAM(Random Access Memory)203と、磁気ディスクドライブ204と、磁気ディスク205と、光ディスクドライブ206と、光ディスク207と、ディスプレイ208と、I/F(Interface)209と、キーボード210と、マウス211と、スキャナ212と、プリンタ213と、を備えている。また、各構成部はバス220によってそれぞれ接続されている。
ここで、CPU201は、グラフ表示装置200の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスクドライブ204は、CPU201の制御にしたがって磁気ディスク205に対するデータのリード/ライトを制御する。磁気ディスク205は、磁気ディスクドライブ204の制御で書き込まれたデータを記憶する。
光ディスクドライブ206は、CPU201の制御にしたがって光ディスク207に対するデータのリード/ライトを制御する。光ディスク207は、光ディスクドライブ206の制御で書き込まれたデータを記憶したり、光ディスク207に記憶されたデータをコンピュータに読み取らせたりする。
ディスプレイ208は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ208は、たとえば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
I/F209は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク214に接続され、このネットワーク214を介して他の装置に接続される。そして、I/F209は、ネットワーク214と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F209には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード210は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス211は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
スキャナ212は、画像を光学的に読み取り、グラフ表示装置200内に画像データを取り込む。なお、スキャナ212は、OCR(Optical Character Reader)機能を持たせてもよい。また、プリンタ213は、画像データや文書データを印刷する。プリンタ213には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
(グラフデータの具体例)
つぎに、描画対象となるグラフに関するグラフデータDについて説明する。図3は、グラフデータの具体例を示す説明図である。図3において、グラフデータDは、描画対象テーブル310と、エッジテーブル320と、アンカーノードテーブル330と、を含む情報である。
まず、描画対象テーブル310は、ノードID、属性およびラベルのフィールドを有する。各フィールドに情報を設定することで描画対象情報310−1〜310−9がレコードとして記憶されている。ここで、ノードIDとは、描画対象となるノードの識別子である。属性とは、ノードの特徴、性質を表す情報(方針、人の名前など)である。ラベルとは、ノードの属性を具体的に表す情報である。たとえば、ノードの属性が「方針」の場合、ラベルは「技術力の強化」などの属性の具体的な内容となる。
エッジテーブル320は、エッジID、第1端点および第2端点のフィールドを有する。各フィールドに情報を設定することで、エッジ情報320−1〜320−8がレコードとして記憶されている。ここで、エッジIDとは、各ノード間をつなぐエッジの識別子である。第1および第2端点は、各エッジの両端点のノードを識別するノードIDである。
アンカーノードテーブル330は、アンカーノードIDおよび属性のフィールドを有する。各フィールドに情報を設定することでアンカーノード情報330−1〜330−4がレコードとして記憶されている。ここで、アンカーノードIDとは、アンカーノードの識別子である。属性とは、ノード(ここでは、アンカーノード)の特徴、性質を表す情報である。
(グラフ表示装置の機能的構成)
つぎに、グラフ表示装置200の機能的構成について説明する。図4は、グラフ表示装置の機能的構成を示すブロック図である。図4において、グラフ表示装置200は、入力部401と、特定部402と、設定部403と、算出部404と、配置部405と、決定部406と、出力部407と、を含む構成である。この制御部となる機能(入力部401〜出力部407)は、具体的には、たとえば、図2に示したROM202、RAM203、磁気ディスク205、光ディスク207などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F209により、その機能を実現する。また、各機能部の処理結果は、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶される。
まず、入力部401は、描画対象となるグラフに関するグラフデータDの入力を受け付ける機能を有する。グラフデータDとは、描画対象となるノード群とノード間の接続関係を示す情報を含むものである(図3参照)。このグラフデータDには、描画対象となるノード群のうちアンカーノードを特定するための情報(たとえば、アンカーノードテーブル330)が含まれていてもよい。
具体的には、たとえば、入力部401が、図2に示したキーボード210やマウス211を用いたユーザの操作入力によりグラフデータDの入力を受け付ける。また、入力部401が、外部コンピュータからの受信、データベースやライブラリからの抽出によりグラフデータDを取得することとしてもよい。なお、入力されたグラフデータDは、たとえば、図5に示すノードテーブル500に記憶される。
図5は、ノードテーブルの記憶内容の一例を示す説明図(その1)である。図5において、ノードテーブル500は、ノードID、属性、ラベル、アンカーフラグ、パス上フラグおよび配置位置のフィールドを有する。各フィールドに情報を設定することで、ノード情報500−1〜500−9がレコードとして記憶されている。
ここで、ノードIDとは、描画対象となるノードの識別子である。属性とは、ノードの特徴や性質を表す情報である。ラベルとは、ノードの属性を具体的に表す情報である。アンカーフラグとは、アンカーノードを示すフラグである。このアンカーフラグは、初期状態では「N(No)」が設定され、アンカーノードを示す場合は「Y(Yes)」が設定される。
パス上フラグとは、アンカーノードを両端とするパス上にあるフリーノードを示すフラグである。このパス上フラグは、初期状態では「N」が設定され、パス上にあるフリーノードを示す場合は「Y」が設定される。配置位置は、描画領域内でのノードの配置位置を示す座標(X座標、Y座標)である。
ここでは、図3に示したグラフデータDが入力された結果、ノードテーブル500内にノード情報500−1〜500−9が新たなレコードとして記憶されている。なお、ノードテーブル500は、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶されている。
図4において、特定部402は、描画対象となるノード群の中からアンカーノードを特定する機能を有する。具体的には、たとえば、特定部402が、入力されたグラフデータDに含まれるアンカーノードテーブル330に基づいて、ノード群N1〜N9の中からアンカーノードN1〜N4を特定することにしてもよい。
なお、特定された特定結果は、たとえば、ノードテーブル500に記憶される。図6は、ノードテーブルの記憶内容の一例を示す説明図(その2)である。ここでは、アンカーノードN1〜N4が特定された結果、ノードテーブル500内のノードN1〜N4の「アンカーフラグ」フィールドに「Y」が設定されている。
また、特定部402は、ノード間の接続関係に基づいて、アンカーノードを両端とするパス上にあるフリーノードを特定する機能を有する。具体的には、たとえば、特定部402が、まず、グラフデータDに含まれるエッジテーブル320に基づいて、既存の探索アルゴリズムにより、アンカーノードを両端とするパスを探索する。そして、特定部402が、探索されたパス上にあるフリーノードを特定する。
なお、特定された特定結果は、たとえば、ノードテーブル500に記憶される。ここでは、フリーノードN5,N7およびN8が特定された結果、ノードテーブル500内のノードN5,N7およびN8の「パス上フラグ」フィールドに「Y」が設定されている(図6参照)。
このノードテーブル500によれば、描画対象となるノード群N1〜N9を、アンカーノードN1〜N4と、パス上にあるフリーノードN5,N7およびN8と、パス上にないフリーノードN6およびN9と、に分類することができる。なお、アンカーノード、パス上にあるフリーノードおよびパス上にないフリーノードは、ユーザの操作入力により予め指定されていてもよい。
なお、以下の説明において、アンカーノードを両端とするパス上にあるフリーノードを「第1のフリーノード」と表記し、パス上にないフリーノードを「第2のフリーノード」と表記する。
図4において、算出部404は、ノードの配置位置を算出する機能を有する。具体的には、たとえば、算出部404が、描画領域内の任意の点Gから等距離にアンカーノードを配置するように配置位置を算出することにしてもよい。より具体的には、描画領域が2次元の場合、算出部404が、描画領域内の任意の点Gを中心とする同一円周上にアンカーノードを配置するように配置位置を算出する。
この際、算出部404が、同一円周上に等間隔(等角度間隔)にアンカーノードを配置するように配置位置を算出することにしてもよい。たとえば、アンカーノードの個数が4個の場合、同一円周上に90度(=360÷4)間隔にアンカーノードを配置するように配置位置が算出されることになる。なお、円の半径は任意に設定されてRAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶されている。また、描画領域が3次元の場合、算出部404が、描画領域内の任意の点Gを中心とする同一球面上にアンカーノードを配置するように配置位置を算出してもよい。
なお、算出された算出結果は、たとえば、ノードテーブル500に記憶される。図7は、ノードテーブルの記憶内容の一例を示す説明図(その3)である。ここでは、アンカーノードN1〜N4の配置位置が算出された結果、ノードテーブル500内のノードN1〜N4の「配置位置」フィールドに、各ノードN1〜N4の配置位置が設定されている。
図4において、配置部405は、算出された算出結果に基づいて、ノードを配置する機能を有する。具体的には、たとえば、配置部405が、算出された算出結果に基づいて、アンカーノードを描画領域内の点Gを中心とする同一円周上に等間隔に配置する。なお、アンカーノード同士で何らかの関連性を有している場合は、それらアンカーノードを他のアンカーノードに比べて近づけて配置することにしてもよい。
設定部403は、第1のフリーノードの初期位置を描画領域内の任意の点に設定する機能を有する。ここで、初期位置とは、フリーノードを配置する配置位置の初期値である。第1のフリーノードの初期位置は、予め任意に設定されてRAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶されている。
具体的には、たとえば、第1のフリーノードの初期位置は、描画領域の原点(たとえば、画面左上)でもよく、また、アンカーノードを配置する円周の中心である点Gでもよい。さらに、第1のフリーノードの初期位置は、任意のレイアウト手法を用いて予め描画領域内に配置された配置位置であってもよい。
また、算出部404は、第1のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、設定された描画領域内の任意の初期位置からの第1のフリーノードの配置位置を算出する機能を有する。ここで、特徴量とは、ノード間の距離と接続関係から導き出される値であり、たとえば、第1または第2のフリーノードに及ぼす他のノード固有の仮想的な引力、斥力などである。
なお、以下の説明では、特に指定する場合を除いて、描画対象となるノード群を「ノード群N1〜Nn」と表記し、ノード群N1〜Nnのうち任意のノードを「ノードNi」と表記する(ただし、i=1,2,…,n)。また、任意のノードNiとは異なる他のノードを「ノードNj」と表記する(ただし、j≠i、j=1,2,…,n)。
具体的には、たとえば、算出部404が、所定の力学モデルに基づいて、第1のフリーノードの配置位置を算出することにしてもよい。所定の力学モデルとして、たとえば、ノード間のエッジをバネと仮定するバネモデルを用いることにしてもよい(スプリングレイアウト)。このバネモデルでは、エッジによって直接接続されたノード間にバネ力を模した力Fs、エッジによって直接接続されていないノード間には逆2乗則の斥力によって互いに反発しあう力Frが働くと仮定する。
具体的には、たとえば、算出部404が、下記式(1)を用いて、ノードNiに働くX軸方向の力Fsを算出することができる。また、算出部404が、下記式(2)を用いて、ノードNiに働くY軸方向の力Fsを算出することができる。ただし、c1はバネの自然長、c2はバネの強さ係数、MXはノードNiのX座標、MYはノードNiのY座標、PXはノードNjのX座標、PYはノードNjのY座標、dはノードNi,Nj間の距離である。
Fx=Fx+c1×log(d/c2)×(PX−MX)/d ・・・(1)
Fy=Fy+c1×log(d/c2)×(PY−MY)/d ・・・(2)
また、算出部404が、下記式(3)を用いて、ノードNiに働くX軸方向の力Frを算出することができる。また、算出部404が、下記式(4)を用いて、ノードNiに働くY軸方向の力Frを算出することができる。ただし、c3はノード間の反発力係数である。
Fx=Fx+c3/d1/2×(PX−MX)/d ・・・(3)
Fy=Fy+c3/d1/2×(PY−MY)/d ・・・(4)
そして、算出部404が、各ノードNiに働く力の合計を算出し、その働く力にしたがってノードNiを移動させる処理を繰り返すことでノード群N1〜Nnの配置位置を算出することができる。このスプリングレイアウトによれば、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
なお、ノードNiに対して力を及ぼすノードNjは、ノードNiを除く他のすべてのノードであってもよく、また、既に配置済みのノードであってもよい。ノードNiに対して力を及ぼすノードNjとして、既に配置済みのノードのみを扱う場合は、全ノードを扱う場合に比べて算出処理にかかる計算量が少なくなる。
算出された算出結果は、たとえば、ノードテーブル500に記憶される。ここでは、アンカーノードN1〜N4の配置位置が算出された結果、ノードテーブル500内のノードN1〜N4の「配置位置」フィールドに、各ノードN1〜N4の配置位置が設定されている(図7参照)。また、配置部405は、算出された算出結果に基づいて、第1のフリーノードを描画領域内に配置する。
また、算出部404は、描画領域内の同一円周上に配置されたアンカーノードを頂点とする多角形の外側に、第2のフリーノードの初期位置を算出する機能を有する。ここで、図8を用いて、第2のフリーノードの初期位置の算出例について説明する。
図8は、第2のフリーノードの初期位置の算出例を示す説明図である。図8において、まず、算出部404は、点Gを中心とする同一円周上に配置されたアンカーノードN1〜N4を頂点とする正方形の辺h1の外側の点S1を、第2のフリーノードの初期位置として算出する。
具体的には、たとえば、算出部404が、点S1の位置が、辺h1の中点C1と点Gとを結ぶ線分の長さf1をα倍した点の位置となるように、第2のフリーノードの初期位置を算出する。なお、上記αは、「1」より大きい任意の整数(たとえば、1.1、1.5など)であり、予め任意に設定されてRAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶されている。
同様に、算出部404が、アンカーノードN1〜N4を頂点とする正方形の辺h2〜h4の外側の点S2〜S4を、第2のフリーノードの初期位置として算出する。この結果、アンカーノードを頂点とする多角形の辺分の初期位置が算出される。なお、算出された第2のフリーノードの初期位置は、図9に示す配置位置候補テーブル900に記憶される。
図9は、配置位置候補テーブルの記憶内容の一例を示す説明図である。図9において、配置位置候補テーブル900は、第2のフリーノードID、初期位置、配置位置候補およびエッジ長のフィールドを有する。各フィールドに情報を設定することで、ノードN6の配置位置候補情報900−1〜900−4がレコードとして記憶されている。
ここで、第2のフリーノードIDとは、第2のフリーノードの識別子である。初期位置とは、第2のフリーノードの初期位置である。配置位置候補とは、第2のフリーノードの配置位置の候補である。エッジ長とは、第2のフリーノードと直接つながれている第1のフリーノードとの間のエッジの長さである。
ここでは、ノードN6の初期位置が算出された結果、配置位置候補テーブル900内の「初期位置」フィールドに、ノードN6の初期位置(図8中、点S1〜S4の位置)が設定されている。なお、第2のフリーノードの初期位置は、たとえば、すべての第2のフリーノード(たとえば、ノードN6,N9)において共通である。
また、図4において、設定部403は、第2のフリーノードの初期位置を、算出されたアンカーノードを頂点とする多角形の外側に設定する機能を有する。具体的には、たとえば、設定部403が、配置位置候補テーブル900を参照して、第2のフリーノードN6の初期位置を、アンカーノードN1〜N4を頂点とする正方形の各辺h1〜h4の外側に設定する。
また、算出部404は、第2のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、設定された多角形の外側の初期位置からの第2のフリーノードの配置位置を算出する機能を有する。具体的には、たとえば、まず、算出部404が、上述したスプリングレイアウトを用いて、設定された多角形の辺ごとの初期位置からの第2のフリーノードの配置位置候補を算出する。
なお、算出された第2のフリーノードの配置位置候補は、たとえば、配置位置候補テーブル900に記憶される。ここでは、各初期位置に対応するノードN6の配置位置候補が算出された結果、配置位置候補テーブル900内の「配置位置候補」フィールドに、ノードN6の配置位置候補が設定されている。
また、図4において、算出部404は、第2のフリーノードと直接つながれている第1のフリーノードとの間のエッジ長を算出する機能を有する。具体的には、たとえば、算出部404が、第2のフリーノードN6の配置位置候補と第1のフリーノードN5の配置位置を用いて、第2のフリーノードN6の配置位置候補ごとのエッジ長を算出することができる。
なお、第2のフリーノードの配置位置候補は、配置位置候補テーブル900から特定することができる。第1のフリーノードの配置位置は、ノードテーブル500から特定することができる。また、算出されたエッジ長は、たとえば、配置位置候補テーブル900に記憶される。ここでは、第2のフリーノードN6の配置位置候補に対応するエッジ長が算出された結果、配置位置候補テーブル900内の「エッジ長」フィールドに、第2のフリーノードN6と第1のフリーノードN5との間のエッジ長L1〜L4が設定されている。
図4において、決定部406は、算出されたエッジ長に基づいて、複数の配置位置候補の中から第2のフリーノードの配置位置を決定する機能を有する。具体的には、たとえば、決定部406が、複数の配置位置候補のうち、第1のフリーノードとの間のエッジ長が最短となる配置位置候補を第2のフリーノードの配置位置に決定する。なお、第1のフリーノードとの間のエッジ長が少なくともの他のエッジ長よりも短くなる配置位置候補を第2のフリーノードの配置位置に決定することにしてもよい。
なお、決定された決定結果は、たとえば、ノードテーブル500に記憶される。ここでは、第2のフリーノードN6,N9の配置位置が決定された結果、ノードテーブル500内のノードN6,N9の「配置位置」フィールドに、ノードN6,N9の配置位置が設定されている(図7参照)。また、配置部405は、決定された決定結果に基づいて、第2のフリーノードを描画領域内に配置する。
ここで、上記配置部405によって配置された配置結果に基づくグラフの具体例について説明する。図10は、グラフの具体例を示す説明図である。図10において、グラフ1000は、ある企業の社員の方向性を可視化して表すグラフである。具体的には、グラフ1000は、社員一人一人の「ありたい姿」、「ありたい姿」を実現するために「必要だと考えること」をアンケート等により収集し、これらと組織方針との類似度を元にグラフ化したものである。
グラフ1000において、「組織方針」のラベルが付与されたノードN1〜N3がアンカーノードである。また、グラフ1000において、「社員の名前」、「必要だと考えること」のラベルが付与されたノードN4〜N14がフリーノードである。また、グラフ1000において、「高橋」および「コストのプロ」のラベルが付与されたノードN7,N11が第2のフリーノードである。
このグラフ1000によれば、「組織方針」に対する各社員の立場、考え、想いなどを直感的に判断することができる。たとえば、「田中」と「山田」は、「技術力はNo.1」、「仕事にチャレンジ」に対して考えや想いが結びついていることがわかる。また、「青木」は、「技術力はNo.1」、「自己革新する組織」に対して考えや想いが結びついていることがわかる。一方で、「高橋」は、いずれの「組織方針」にも考えや想いが結びついていないことがわかる。なお、ここでは本手法を組織マネジメントに適用する場合について説明したが、本手法はコミュニケーション分析、グループウェアなどにも有用である。
出力部407は、配置されたノード群とノード間をつなぐエッジとに基づくグラフを出力する機能を有する。具体的には、たとえば、出力部407が、ノードが配置されると、その都度、配置されたノード群とノード間をつなぐエッジとに基づくグラフをディスプレイ208に表示することにしてもよい。
また、出力部407が、描画対象となるノード群のすべてが配置されたあと、配置されたノード群とノード間をつなぐエッジとに基づくグラフ(図10参照)をディスプレイ208に表示することにしてもよい。出力形式としては、たとえば、ディスプレイ208への表示、プリンタ213への印刷出力、I/F209による外部装置への送信がある。また、RAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶することとしてもよい。
なお、上述の説明では、第2のフリーノードの初期位置を算出することにしたが、これに限らない。具体的には、たとえば、キーボード210やマウス211を用いたユーザの操作入力により、アンカーノードを頂点とする多角形の外側の任意の点を第2のフリーノードの初期位置として指定することにしてもよい。
また、上述したスプリング手法において、逆2乗則の斥力Frを取り除いて、すべてのノード間がバネでつながれていると仮定することにしてもよい。この手法では、各バネはノード間のグラフ理論的な距離によって決まる自然長を持つモデルとなる。このモデルでは、グラフ理論的な距離が近いノードほど近くに配置されることになる。
また、エッジでつながれたノード同士はノード間の距離の2乗に比例する引力Faを受け、すべてのノード同士はノード間の距離に反比例する斥力Frを受けるようにモデル化する手法もある。この手法によれば、スプリング手法のアルゴリズムと同じような特徴を持つレイアウトモデルをシンプルに表現でき、計算処理の効率化を図ることができる。
また、レイアウトモデルに、温度の概念と、その冷却過程を導入することにしてもよい。具体的には、レイアウト計算の初期段階では、系全体の温度が高く、各要素が大きなエネルギーを持つ状態と仮定して各ノードを大きく移動させ、計算が進むにつれて、系全体の温度が低くなるため、各ノードの移動量を小さくしていく。これは、繰り返し計算一回におけるノードの移動許容距離を制限し、その許容範囲を繰り返し計算の回数が進むごとに減らしていくことで実現できる。これにより、ノードを大きく動かしすぎることを避け、計算が適切に収束に向かうことになる。
また、各ノードにローカルな温度を定義することにしてもよい。ノードの移動量を、そのノードの温度に基づいて決定する。ローカルな温度は、レイアウトモデルの中で、そのノードが安定状態に向かうほど低くなっていく。なお、ノードが振動や回転を続けるとレイアウト計算が収束しないため、ノードの移動に振動や回転がある場合にも低くなるようにする。
なお、力学モデルは基本的にバネモデルであるが、乱数による擾乱およびレイアウト中心への引力が付加されている。乱数の擾乱はレイアウトがローカルな安定状態に陥るのを避けてグローバルな安定状態へと向かうための働きを持っており、レイアウト中心への引力は接続されていないコンポーネント同士があまりにも遠くに離れてしまうことを避け、計算の収束が速くなる。
(グラフ表示装置のグラフ表示処理手順)
つぎに、グラフ表示装置200のグラフ表示処理手順について説明する。図11は、グラフ表示装置のグラフ表示処理手順の一例を示すフローチャートである。図11のフローチャートにおいて、まず、入力部401により、描画対象となるグラフに関するグラフデータDの入力を受け付けたか否かを判断する(ステップS1101)。
ここで、グラフデータDの入力を待って(ステップS1101:No)、入力を受け付けた場合(ステップS1101:Yes)、特定部402により、描画対象となるノード群のノード情報を新たなレコードとして登録することで、ノードテーブル500を作成する(ステップS1102)。
そして、特定部402により、描画対象となるノード群の中からアンカーノードを特定し(ステップS1103)、ノードテーブル500内のアンカーフラグに「Y」を設定する(ステップS1104)。このあと、特定部402により、アンカーノードを両端とするパス上にある第1のフリーノードを特定する(ステップS1105)。
さらに、特定部402により、ノードテーブル500内のパス上フラグに「Y」を設定する(ステップS1106)。そして、配置部405により、アンカーノードを同一円周上に等間隔に配置する(ステップS1107)。つぎに、配置部405により、第1のフリーノードを配置する第1のフリーノード配置処理を実行する(ステップS1108)。
このあと、算出部404により、第2のフリーノードの初期位置を算出する初期位置算出処理を実行する(ステップS1109)。そして、配置部405により、第2のフリーノードを配置する第2のフリーノード配置処理を実行する(ステップS1110)。最後に、出力部407により、配置されたノード群とノード間をつなぐエッジとに基づくグラフをディスプレイ208に表示して(ステップS1111)、本フローチャートによる一連の処理を終了する。
これにより、画面上の描画領域において、第1および第2のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にして、グラフ全体の概観を直感的に理解し易いように表示することができる。
<第1のフリーノード配置処理手順>
つぎに、図11に示したステップS1108の第1のフリーノード配置処理の具体的処理手順について説明する。図12は、第1のフリーノード配置処理の具体的処理手順の一例を示すフローチャートである。この第1のフリーノード配置処理は、第1のフリーノードを描画領域に配置する処理である。
図12のフローチャートにおいて、まず、算出部404により、スプリングレイアウトのループ数Kを設定し(ステップS1201)、現ループ数kを「k=1」とする(ステップS1202)。なお、ループ数Kは、任意に設定されてRAM203、磁気ディスク205、光ディスク207などの記憶領域に記憶されている。
このあと、算出部404により、「i=1」として(ステップS1203)、ノードテーブル500の中からノードNiを選択する(ステップS1204)。そして、算出部404により、ノードテーブル500のパス上フラグを参照して、ノードNiが第1のフリーノードか否かを判断する(ステップS1205)。
ここで、第1のフリーノードではない場合(ステップS1205:No)、ステップS1213に移行する。一方、第1のフリーノードの場合(ステップS1205:Yes)、設定部403により、ノードNiの初期位置を描画領域内の任意の点に設定する(ステップS1206)。
このあと、算出部404により、ノードNiに働く力を算出する働く力算出処理を実行する(ステップS1207)。そして、算出部404により、ノードNiの配置位置(Xi,Yi)を「Xi=Xi+Fx,Yi=Yi+Fy」とする(ステップS1208)。つぎに、配置部405により、ノードNiを描画領域内に配置し(ステップS1209)、エッジテーブル320を参照して、ノード間をエッジでつなぐ(ステップS1210)。
このあと、算出部404により、kをインクリメントして(ステップS1211)、「k>K」か否かを判断する(ステップS1212)。ここで、「k≦K」の場合(ステップS1212:No)、ステップS1207に戻る。一方、「k>K」の場合(ステップS1212:Yes)、算出部404により、iをインクリメントして(ステップS1213)、「i>n」か否かを判断する(ステップS1214)。
ここで、「i≦n」の場合(ステップS1214:No)、ステップS1204に戻る。一方、「i>n」の場合(ステップS1214:Yes)、図11に示したステップS1109に移行する。
これにより、画面上の描画領域において、第1のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
<働く力算出処理手順>
つぎに、図12に示したステップS1207(または、図15−2に示すステップS1509)の働く力算出処理の具体的処理手順について説明する。図13は、働く力算出処理の具体的処理手順の一例を示すフローチャートである。この働く力算出処理は、ノードNiに働く力からノードNiの初期位置からの移動量を算出するための処理である。
図13のフローチャートにおいて、まず、算出部404により、「MX=Xi,MY=Yi」とし(ステップS1301)、「Fx=0,Fy=0」とする(ステップS1302)。なお、XiおよびYiは、図12に示したステップS1206において設定されたノードNiの初期位置のX座標およびY座標である。また、FxはノードNiに働くX軸方向の力、FyはノードNiに働くY軸方向の力である。
このあと、算出部404により、「j=1」として(ステップS1303)、「i=j」か否かを判断する(ステップS1304)。ここで、「i=j」の場合(ステップS1304:Yes)、ステップS1314に移行する。
一方、「i≠j」の場合(ステップS1304:No)、算出部404により、ノードNjが配置済みか否かを判断する(ステップS1305)。具体的には、たとえば、算出部404が、ノードテーブル500内のノードNjの配置位置フィールドに情報が設定されている場合、ノードNjが配置済みと判断する。
ここで、ノードNjが未配置の場合(ステップS1305:No)、ステップS1314に移行する。一方、ノードNjが配置済みの場合(ステップS1305:Yes)、算出部404により、ノードテーブル500の中からノードNjを選択する(ステップS1306)。
このあと、算出部404により、「PX=Xj,PY=Yj」とする(ステップS1307)。なお、XjおよびYjは、ノードテーブル500内のノードNjの配置位置のX座標およびY座標である。そして、算出部404により、ノードNiの初期位置およびノードNjの配置位置に基づいて、ノードNi,Nj間の距離dを算出する(ステップS1308)。
つぎに、算出部404により、エッジテーブル320を参照して、ノードNi,Nj間は直接つながっているか否かを判断する(ステップS1309)。ここで、直接つながっている場合(ステップS1309:Yes)、算出部404により、上記式(1)を用いて、ノードNiに働くX軸方向の力Fxを算出する(ステップS1310)。さらに、算出部404により、上記式(2)を用いて、ノードNiに働くY軸方向の力Fyを算出する(ステップS1311)。
一方、ステップS1309において、直接つながっていない場合(ステップS1309:No)、算出部404により、上記式(3)を用いて、ノードNiに働くX軸方向の力Fxを算出する(ステップS1312)。さらに、算出部404により、上記式(4)を用いて、ノードNiに働くY軸方向の力Fyを算出する(ステップS1313)。
このあと、算出部404により、jをインクリメントして(ステップS1314)、「j>n」か否かを判断する(ステップS1315)。ここで、「j≦n」の場合(ステップS1315:No)、ステップS1304に戻る。一方、「j>n」の場合(ステップS1315:Yes)、図12に示したステップS1208(または、図15−2に示すステップS1510)に移行する。
これにより、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
<初期位置算出処理手順>
つぎに、図11に示したステップS1109の初期位置算出処理の具体的処理手順について説明する。図14は、初期位置算出処理の具体的処理手順の一例を示すフローチャートである。この初期位置算出処理は、同一円周上に配置されたアンカーノードを頂点とする多角形の各辺の外側の第2のフリーノードの初期位置を算出する処理である。
図14のフローチャートにおいて、まず、算出部404により、「CX=XO,CY=YO」とする(ステップS1401)。なお、XOおよびYOは、画面上での描画領域の中心を表す点GのX座標およびY座標である。そして、算出部404により、アンカーノードを配置順にソートして、アンカーノードAN1〜ANmとする(ステップS1402)。
このあと、算出部404により、「p=1」とし(ステップS1403)、さらに、「q=p+1」とする(ステップS1404)。そして、算出部404により、ノードテーブル500の中からアンカーノードANpを選択する(ステップS1405)。ただし、ここではアンカーノードANpの配置位置を(AXp,AYp)とする。
また、算出部404により、ノードテーブル500の中からアンカーノードANqを選択する(ステップS1406)。ただし、ここではアンカーノードANqの配置位置を(AXq,AYq)とする。そして、算出部404により、「SXp=CX,SYp=CY」とする(ステップS1407)。なお、SXpおよびSYpは、第2のフリーノードの初期位置のX座標およびY座標である。
このあと、算出部404により、「SXp=CX+α(AXq−AXp−CX)」を算出する(ステップS1408)。また、算出部404により、「SYp=CY+α(AYq−AYp−CY)」を算出する(ステップS1409)。なお、ステップS1408およびS1409において算出された算出結果は、たとえば、配置位置候補テーブル900内の配置位置候補フィールドに設定される。
つぎに、算出部404により、pをインクリメントして(ステップS1410)、「p≧m」か否かを判断する(ステップS1411)。ここで、「p<m」の場合(ステップS1411:No)、ステップS1404に戻る。一方、「p≧m」の場合(ステップS1411:Yes)、図11に示したステップS1110に移行する。
これにより、アンカーノードを頂点とする多角形の外側に設定する第2のフリーノードの初期位置を網羅的かつ効率的に自動算出することができる。
<第2のフリーノード配置処理手順>
つぎに、図11に示したステップS1110の第2のフリーノード配置処理の具体的処理手順について説明する。図15−1および図15−2は、第2のフリーノード配置処理の具体的処理手順の一例を示すフローチャートである。この第2のフリーノード配置処理は、第2のフリーノードを描画領域に配置する処理である。
図15−1のフローチャートにおいて、まず、算出部404により、スプリングレイアウトのループ数Kを設定し(ステップS1501)、現ループ数kを「k=1」とする(ステップS1502)。このあと、算出部404により、「i=1」として(ステップS1503)、ノードテーブル500の中からノードNiを選択する(ステップS1504)。
そして、算出部404により、ノードテーブル500のアンカーフラグを参照して、ノードNiがアンカーノードか否かを判断する(ステップS1505)。ここで、アンカーノードの場合(ステップS1505:Yes)、図15−2に示すステップS1518に移行する。
一方、アンカーノードではない場合(ステップS1505:No)、算出部404により、ノードテーブル500のパス上フラグを参照して、ノードNiが第1のフリーノードか否かを判断する(ステップS1506)。ここで、第1のフリーノードの場合(ステップS1506:Yes)、図15−2に示すステップS1518に移行する。一方、第1のフリーノードではない場合(ステップS1506:No)、設定部403により、「p=1」として(ステップS1507)、図15−2に示すステップS1508に移行する。
図15−2のフローチャートにおいて、まず、設定部403により、配置位置候補テーブル900を参照して、ノードNiの初期位置「Xi(p)=SXp,Yi(p)=SYp」を設定する(ステップS1508)。ただし、Xi(p)およびYi(p)は、ノードNiの初期位置のX座標およびY座標である。
このあと、算出部404により、ノードNiに働く力を算出する働く力算出処理を実行する(ステップS1509)。そして、算出部404により、ノードNiの配置位置(Xi(p),Yi(p))を「Xi(p)=Xi(p)+Fx,Yi(p)=Yi(p)+Fy」とする(ステップS1510)。
つぎに、配置部405により、ノードNiを描画領域内に配置し(ステップS1511)、エッジテーブル320を参照して、ノード間をエッジでつなぐ(ステップS1512)。このあと、算出部404により、kをインクリメントして(ステップS1513)、「k>K」か否かを判断する(ステップS1514)。
ここで、「k≦K」の場合(ステップS1514:No)、ステップS1509に戻る。一方、「k>K」の場合(ステップS1514:Yes)、算出部404により、pをインクリメントして(ステップS1515)、「p>m」か否かを判断する(ステップS1516)。
ここで、「p≦m」の場合(ステップS1516:No)、ステップS1508に戻る。一方、「p>m」の場合(ステップS1516:Yes)、決定部406により、複数の配置位置候補の中からノードNiの配置位置を決定する配置位置決定処理を実行する(ステップS1517)。
このあと、算出部404により、iをインクリメントして(ステップS1518)、「i>n」か否かを判断する(ステップS1519)。ここで、「i≦n」の場合(ステップS1519:No)、図15−1に示したステップS1504に戻る。一方、「i>n」の場合(ステップS1519:Yes)、図11に示したステップS1111に移行する。
これにより、画面上の描画領域において、第2のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
<配置位置決定処理手順>
つぎに、図15−2に示したステップS1517の配置位置決定処理の具体的処理手順について説明する。図16は、配置位置決定処理の具体的処理手順の一例を示すフローチャートである。この配置位置決定処理は、複数の配置位置候補の中からノードNiの配置位置を決定する処理である。
図16のフローチャートにおいて、まず、算出部404により、「p=1」とする(ステップS1601)。そして、算出部404により、ノードNiと直接つながれている第1のフリーノードとの間のエッジ長Lpを算出する(ステップS1602)。なお、算出されたエッジ長Lpは、配置位置候補テーブル900に登録される。
このあと、算出部404により、pをインクリメントして(ステップS1603)、「p>m」か否かを判断する(ステップS1604)。ここで、「p≦m」の場合(ステップS1604:No)、ステップS1602に戻る。
一方、「p>m」の場合(ステップS1604:Yes)、決定部406により、配置位置候補テーブル900内のエッジ長フィールドを参照して、エッジ長L1〜Lmの中から最短のエッジ長Lpを特定する(ステップS1605)。そして、決定部406により、ノードNiの配置位置「Xi=Xi(p),Yi=Yi(p)」を決定して(ステップS1606)、図15−2に示したステップS1518に移行する。
これにより、第2のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とが同程度となる配置位置を適切に決めることができる。
以上説明したように、本実施の形態では、同一円周上に配置されたアンカーノードを頂点とする多角形の外側に第2のフリーノードの初期位置を設定し、他のノードとの接続関係に応じた特徴量に基づいて、第2のフリーノードの配置位置を算出する。これにより、画面上の描画領域において、第2のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
また、本実施の形態では、多角形の各辺の外側に初期位置を設定して、第2のフリーノードの複数の配置位置候補を算出し、第2のフリーノードに直接つながれた第1のフリーノードとの間のエッジ長が最短となる配置位置候補を第2のフリーノードの配置位置に決定してもよい。これにより、第2のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とが同程度となる配置位置を適切に決めることができる。
また、本実施の形態では、アンカーノードを同一円周上に等間隔に配置することにしてもよい。これにより、互いに接続関係のない複数のアンカーノードを描画領域内に均等に配置して、グラフ全体の概観をより直感的に理解し易いように表示することができる。
また、本実施の形態では、第1または第2のフリーノードと他のノードとがエッジでつながれている場合、ノード間の距離に応じて働く引力に基づいて、第1または第2のフリーノードの配置位置を算出してもよい。また、本実施の形態では、第1または第2のフリーノードと他のノードとがエッジでつながれていない場合、ノード間の距離に応じて働く斥力に基づいて、第1または第2のフリーノードの配置位置を算出してもよい。これにより、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
また、本実施の形態では、同一円周上に配置されたアンカーノードの配置位置に基づいて、アンカーノードを頂点とする多角形の外側に設定する第2のフリーノードの初期位置を網羅的かつ効率的に自動算出することができる。
以上のことから、本実施の形態にかかるグラフ表示プログラムおよびグラフ表示方法によれば、各フリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることにより、グラフ全体の概観を直感的に理解し易いように表示することができる。
なお、本実施の形態で説明したグラフ表示方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本グラフ表示プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本グラフ表示プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータを、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第1のフリーノードと、当該パス上にない第2のフリーノードとに分類する分類手段、
前記アンカーノードを描画領域内の任意の点から等距離に配置する第1の配置手段、
前記分類手段によって分類された第1のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内の任意の初期位置からの前記第1のフリーノードの配置位置を算出する第1の算出手段、
前記第1の配置手段によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類手段によって分類された第2のフリーノードの初期位置を設定する設定手段、
前記第2のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記設定手段によって設定された初期位置からの前記第2のフリーノードの配置位置を算出する第2の算出手段、
前記第1および第2の算出手段によって算出された算出結果に基づいて、前記第1および第2のフリーノードを前記描画領域内に配置する第2の配置手段、
として機能させることを特徴とするグラフ表示プログラム。
(付記2)前記設定手段は、前記多角形の各辺の外側に前記第2のフリーノードの初期位置を設定し、
前記第2の算出手段は、前記第2のフリーノードごとに、前記設定手段によって設定された多角形の辺ごとの初期位置からの前記第2のフリーノードの複数の配置位置を算出し、
前記第2の配置手段は、前記第2の算出手段によって算出された第2のフリーノードごとの複数の配置位置である配置位置候補と当該第2のフリーノードに直接つながれた前記第1のフリーノードの配置位置から得られる当該ノード間をつなぐエッジの長さに基づいて、前記複数の配置位置候補の中から、前記第2のフリーノードの配置位置を選択して前記描画領域内に配置することを特徴とする付記1に記載のグラフ表示プログラム。
(付記3)前記第2の配置手段は、前記複数の配置位置候補の中から、前記エッジの長さが最短となる配置位置候補を前記第2のフリーノードの配置位置として選択することを特徴とする付記2に記載のグラフ表示プログラム。
(付記4)前記第1の配置手段は、前記アンカーノードを前記描画領域内の同一円周上に等間隔に配置することを特徴とする付記1〜3のいずれか一つに記載のグラフ表示プログラム。
(付記5)前記第1および第2の算出手段は、前記第1または第2のフリーノードと前記他のノードとがエッジでつながれている場合、前記ノード間の距離に応じて働く仮想的な引力に基づいて、前記第1または第2のフリーノードの配置位置を算出することを特徴とする付記1〜4のいずれか一つに記載のグラフ表示プログラム。
(付記6)前記第1および第2の算出手段は、前記第1または第2のフリーノードと前記他のノードとがエッジでつながれていない場合、前記ノード間の距離に応じて働く仮想的な斥力に基づいて、前記第1または第2のフリーノードの配置位置を算出することを特徴とする付記1〜5のいずれか一つに記載のグラフ表示プログラム。
(付記7)前記設定手段は、前記第1の配置手段によって配置されたアンカーノードの配置位置に基づいて、前記多角形の各辺の外側の前記第2のフリーノードの初期位置を算出し、当該算出された初期位置に前記第2のフリーノードの初期位置を設定することを特徴とする付記1〜6のいずれか一つに記載のグラフ表示プログラム。
(付記8)アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータが、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第1のフリーノードと、当該パス上にない第2のフリーノードとに分類する分類工程と、
前記アンカーノードを描画領域内の任意の点から等距離に配置する第1の配置工程と、
前記分類工程によって分類された第1のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内の任意の初期位置からの前記第1のフリーノードの配置位置を算出する第1の算出工程と、
前記第1の配置工程によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類工程によって分類された第2のフリーノードの初期位置を設定する設定工程と、
前記第2のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記設定工程によって設定された初期位置からの前記第2のフリーノードの配置位置を算出する第2の算出工程と、
前記第1および第2の算出工程によって算出された算出結果に基づいて、前記第1および第2のフリーノードを前記描画領域内に配置する第2の配置工程と、
を実行することを特徴とするグラフ表示方法。