(57)【特許請求の範囲】
【請求項１】
アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータを、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第１のフリーノードと、当該パス上にない第２のフリーノードとに分類する分類手段、
前記アンカーノードを描画領域内のいずれかの点から等距離に配置する第１の配置手段、
前記分類手段によって分類された第１のフリーノードとは異なる前記描画領域内に配置された他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内のいずれかの初期位置からの前記第１のフリーノードの配置位置を算出する第１の算出手段、
前記第１の算出手段によって算出された算出結果に基づいて、前記第１のフリーノードを前記描画領域内に配置する第２の配置手段、
前記第１の配置手段によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類手段によって分類された第２のフリーノードの初期位置を設定する設定手段、
前記第２の配置手段によって、前記第１のフリーノードが前記描画領域内に配置された後、前記第２のフリーノードとは異なる前記描画領域内に配置された他のノードとの接続関係に応じた特徴量に基づいて、前記設定手段によって設定された初期位置からの前記第２のフリーノードの配置位置を算出する第２の算出手段、
前記第２の算出手段によって算出された算出結果に基づいて、前記第２のフリーノードを前記描画領域内に配置する第３の配置手段、
として機能させることを特徴とするグラフ表示プログラム。
【請求項２】
前記設定手段は、前記多角形の各辺の外側に前記第２のフリーノードの初期位置を設定し、
前記第２の算出手段は、前記第２のフリーノードごとに、前記設定手段によって設定された多角形の辺ごとの初期位置からの前記第２のフリーノードの複数の配置位置を算出し、
前記第２の配置手段は、前記第２の算出手段によって算出された第２のフリーノードごとの複数の配置位置である配置位置候補と当該第２のフリーノードに直接つながれた前記
第１のフリーノードの配置位置から得られる当該ノード間をつなぐエッジの長さに基づいて、複数の前記配置位置候補の中から、前記第２のフリーノードの配置位置を選択して前記描画領域内に配置することを特徴とする請求項１に記載のグラフ表示プログラム。
【請求項３】
前記第１および第２の算出手段は、前記第１または第２のフリーノードと前記他のノードとがエッジでつながれている場合、前記ノード間の距離に応じて働く仮想的な引力に基づいて、前記第１または第２のフリーノードの配置位置を算出することを特徴とする請求項１または２に記載のグラフ表示プログラム。
【請求項４】
アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータが、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第１のフリーノードと、当該パス上にない第２のフリーノードとに分類する分類工程と、
前記アンカーノードを描画領域内のいずれかの点から等距離に配置する第１の配置工程と、
前記分類工程によって分類された第１のフリーノードとは異なる前記描画領域内に配置された他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内のいずれかの初期位置からの前記第１のフリーノードの配置位置を算出する第１の算出工程と、
前記第１の算出工程によって算出された算出結果に基づいて、前記第１のフリーノードを前記描画領域内に配置する第２の配置工程と、
前記第１の配置工程によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類工程によって分類された第２のフリーノードの初期位置を設定する設定工程と、
前記第２の配置工程によって、前記第１のフリーノードが前記描画領域内に配置された後、前記第２のフリーノードとは異なる前記描画領域内に配置された他のノードとの接続関係に応じた特徴量に基づいて、前記設定工程によって設定された初期位置からの前記第２のフリーノードの配置位置を算出する第２の算出工程と、
前記第２の算出工程によって算出された算出結果に基づいて、前記第２のフリーノードを前記描画領域内に配置する第３の配置工程と、
を実行することを特徴とするグラフ表示方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、グラフを表示するグラフ表示プログラムおよびグラフ表示方法に関する。
【背景技術】
【０００２】
一般に、ＫＪ法（登録商標）のようなカードを使った情報の整理においては、カードはその内容（観点）の類似性により複数のグループに分類され、カード間には何らかの関係が付けられる。また、このカードに記述されている情報をノードとしてグラフ化することにより、全体の概観を視覚化して表現することができる。
【０００３】
従来において、上記のようなカードに記述されている情報をグラフ化する場合、一つの観点をアンカーノードとして固定することでアンカーマップを作成する手法がある。アンカーマップとは、２部グラフの２種類のノードのうち１種類のノードに位置の制約を課して配置するグラフである。また、２部グラフとは、ノードの属性が２種類あり、同一属性のノード間にはエッジがないグラフである。
【０００４】
また、従来において、電子的な情報交換をおこなう利用者間の関係情報を配置したネットワークグラフを作成する技術がある（たとえば、下記特許文献１参照。）。この技術では、利用者間の関係情報が一定以上の利用者をアンカーノードとして円周上に配置し、その他のノードをアンカーノードとの関連度の大きいものから順に配置する。
【０００５】
また、ノードとアークからなるグラフをディスプレイ空間に配置する際のノードの配置結果の品質向上を図る技術がある（たとえば、下記特許文献２参照。）。この技術では、ディスプレイ空間にノードを順次追加しながら配置し、ノードが追加配置されるたびに、追加されたノードと配置済のノードとの間に所定の力学モデルを適用して各ノードの位置を修正する。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平１１−２６５３６９号公報
【特許文献２】特開２００２−３１２８０３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、カードを使った情報の整理などでは、各情報をノードとしてグラフ化する際のグラフ構造が２部グラフにならないことが多い。そのため、上述した従来技術によれば、あるノードから他のノードに辿り着くまでのエッジ数（ホップ数）と画面上でのノード間の距離とが合わなくなり、ユーザが直感的に理解しにくいものとなる場合があるという問題があった。
【０００８】
図１７は、従来技術の問題点を示す説明図である。グラフ１７００において、ノードＮ１〜Ｎ４はアンカーノードである。ここで、ノードＮ５，Ｎ７，Ｎ８は、アンカーノードＮ１〜Ｎ４と直接つながれており、アンカーノードＮ１〜Ｎ４からのエッジ数とノード間の距離とが同程度となっている。
【０００９】
しかしながら、アンカーノードＮ１〜Ｎ４と直接つながれていないノードＮ６，Ｎ９については、アンカーノードＮ１〜Ｎ４からのエッジ数とノード間の距離とが合わず、ユーザにとって直感的に理解しにくいものとなっている。たとえば、アンカーノードＮ１からノードＮ６までのエッジ数は「２」、アンカーノードＮ１からノードＮ５までのエッジ数は「１」と異なる一方で、ノード間の距離はほぼ同じものとなっている。
【００１０】
本発明は、上述した従来技術による問題点を解消するため、グラフ全体の概観を直感的に理解し易いように表示することができるグラフ表示プログラムおよびグラフ表示方法を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上述した課題を解決し、目的を達成するため、開示のグラフ表示プログラムおよびグラフ表示方法は、アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するグラフ表示プログラムおよびグラフ表示方法であって、前記フリーノードを、前記アンカーノードを両端とするパス上にある第１のフリーノードと、当該パス上にない第２のフリーノードとに分類し、前記アンカーノードを描画領域内の任意の点から等距離に配置し、分類された第１のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内の任意の初期位置からの前記第１のフリーノードの配置位置を算出し、配置されたアンカーノードを頂点とする多角形の外側に、分類された第２のフリーノードの初期位置を設定し、前記第２のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、設定された初期位置からの前記第２のフリーノードの配置位置を算出し、算出された算出結果に基づいて、前記第１および第２のフリーノードを前記描画領域内に配置することを要件とする。
【発明の効果】
【００１２】
本グラフ表示プログラムおよびグラフ表示方法によれば、グラフ全体の概観を直感的に理解し易いように表示することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】本グラフ表示手法の概要の一例を示す説明図である。
【図２】グラフ表示装置のハードウェア構成の一例を示すブロック図である。
【図３】グラフデータの具体例を示す説明図である。
【図４】グラフ表示装置の機能的構成を示すブロック図である。
【図５】ノードテーブルの記憶内容の一例を示す説明図（その１）である。
【図６】ノードテーブルの記憶内容の一例を示す説明図（その２）である。
【図７】ノードテーブルの記憶内容の一例を示す説明図（その３）である。
【図８】第２のフリーノードの初期位置の算出例を示す説明図である。
【図９】配置位置候補テーブルの記憶内容の一例を示す説明図である。
【図１０】グラフの具体例を示す説明図である。
【図１１】グラフ表示装置のグラフ表示処理手順の一例を示すフローチャートである。
【図１２】第１のフリーノード配置処理の具体的処理手順の一例を示すフローチャートである。
【図１３】働く力算出処理の具体的処理手順の一例を示すフローチャートである。
【図１４】初期位置算出処理の具体的処理手順の一例を示すフローチャートである。
【図１５−１】第２のフリーノード配置処理の具体的処理手順の一例を示すフローチャート（その１）である。
【図１５−２】第２のフリーノード配置処理の具体的処理手順の一例を示すフローチャート（その２）である。
【図１６】配置位置決定処理の具体的処理手順の一例を示すフローチャートである。
【図１７】従来技術の問題点を示す説明図である。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、この発明にかかるグラフ表示プログラムおよびグラフ表示方法の好適な実施の形態を詳細に説明する。なお、本明細書において、グラフとは、描画対象となるノード群と、ノード間をつなぐエッジとを含むものである。アンカーノードとは、描画対象となるノード群のうち、アンカーノード同士でつながりを持たないノードである。フリーノードとは、描画対象となるノード群のうちアンカーノードを除く残余のノードである。
【００１５】
（本グラフ表示手法の概要）
まず、実施の形態にかかるグラフ表示手法の概要について説明する。図１は、本グラフ表示手法の概要の一例を示す説明図である。ここでは、描画対象となるノード群を「ノード群Ｎ１〜Ｎ８」、アンカーノードを「ノードＮ１〜Ｎ４」、フリーノードを「ノードＮ５〜Ｎ８」として説明する。
【００１６】
（１）本手法では、描画対象となるノード群Ｎ１〜Ｎ８のうちアンカーノードＮ１〜Ｎ４を描画領域内の任意の点Ｇを中心とする同一円周上に配置する。この際、アンカーノードＮ１〜Ｎ４を等間隔（等角度間隔）に配置することにしてもよい。なお、点Ｇは、たとえば、画面上での描画領域の中心を表す点（ＸO，ＹO）である。
【００１７】
（２）本手法では、アンカーノードＮ１〜Ｎ４を両端とするパスＰ１〜Ｐ３上にあるフリーノードＮ５〜Ｎ７を描画領域内に配置する。具体的には、本手法では、フリーノードＮ５〜Ｎ７と他のノードとの接続関係に応じた特徴量に基づいて、描画領域内の任意の初期位置からのフリーノードＮ５〜Ｎ７の配置位置を算出して配置する。
【００１８】
ここで、特徴量とは、ノード間の距離と接続関係から導き出される値（引力、斥力など）である。また、パスとは、一のノードから他のノードに辿り着くまでの経路であって、同じエッジを２度通らない経路である。具体的には、パスＰ１はアンカーノードＮ１，Ｎ２を両端とするパス（経路）、パスＰ２はアンカーノードＮ２，Ｎ３を両端とするパス、パスＰ３はアンカーノードＮ２，Ｎ４を両端とするパスである。
【００１９】
（３）本手法では、パスＰ１〜Ｐ３上にないフリーノードＮ８を描画領域内に配置する。具体的には、本手法では、フリーノードＮ８と他のノードとの接続関係に応じた特徴量に基づいて、アンカーノードＮ１〜Ｎ４を頂点とする多角形（図１では正方形）の各辺ｈ１〜ｈ４の外側に設定された初期位置からのフリーノードＮ８の配置位置を算出して配置する。
【００２０】
（４）本手法では、上記（３）において配置されたフリーノードＮ８の配置位置のうち、フリーノードＮ８と直接つながれたフリーノードＮ５との間のエッジ長が最短の配置位置をフリーノードＮ８の配置位置に決定する。ここでは、フリーノードＮ５とエッジＬ１でつながれた配置位置がフリーノードＮ８の配置位置に決定される。
【００２１】
このように、本手法では、フリーノードＮ８の初期位置を、アンカーノードＮ１〜Ｎ４を頂点とする多角形の外側に設定することで、フリーノードＮ８の配置位置を調整する。具体的には、たとえば、各フリーノードＮ５〜Ｎ８の配置位置をノード間の接続関係に応じた特徴量から求める場合、アンカーノードＮ１〜Ｎ４に直接つながれたフリーノードＮ５〜Ｎ７は、アンカーノードＮ１〜Ｎ４を頂点とする多角形の内側に配置される傾向がある。
【００２２】
そこで、本手法では、アンカーノードＮ１〜Ｎ４に直接つながれていないフリーノードＮ８の初期位置を多角形の外側に設定することで、フリーノードＮ８と直接つながれていないフリーノードＮ６，Ｎ７が近傍に位置することを意図的に避けて、適切な配置位置を求める。これにより、画面上の描画領域において、アンカーノードＮ１〜Ｎ４からフリーノードＮ８までのエッジ数とノード間の距離とを同程度にして、グラフ全体の概観を直感的に理解し易いように表示することができる。
【００２３】
なお、図１の例では、描画領域が２次元の場合について説明したが、描画領域が３次元の場合は、上記（１）において、たとえば、アンカーノードＮ１〜Ｎ４を描画領域内の任意の点Ｇを中心とする同一球面上に配置することにしてもよい。
【００２４】
（グラフ表示装置のハードウェア構成）
つぎに、実施の形態にかかるグラフ表示のハードウェア構成について説明する。図２は、グラフ表示装置のハードウェア構成の一例を示すブロック図である。図２において、グラフ表示装置２００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスクドライブ２０４と、磁気ディスク２０５と、光ディスクドライブ２０６と、光ディスク２０７と、ディスプレイ２０８と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０９と、キーボード２１０と、マウス２１１と、スキャナ２１２と、プリンタ２１３と、を備えている。また、各構成部はバス２２０によってそれぞれ接続されている。
【００２５】
ここで、ＣＰＵ２０１は、グラフ表示装置２００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。磁気ディスクドライブ２０４は、ＣＰＵ２０１の制御にしたがって磁気ディスク２０５に対するデータのリード／ライトを制御する。磁気ディスク２０５は、磁気ディスクドライブ２０４の制御で書き込まれたデータを記憶する。
【００２６】
光ディスクドライブ２０６は、ＣＰＵ２０１の制御にしたがって光ディスク２０７に対するデータのリード／ライトを制御する。光ディスク２０７は、光ディスクドライブ２０６の制御で書き込まれたデータを記憶したり、光ディスク２０７に記憶されたデータをコンピュータに読み取らせたりする。
【００２７】
ディスプレイ２０８は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０８は、たとえば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２８】
Ｉ／Ｆ２０９は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１４に接続され、このネットワーク２１４を介して他の装置に接続される。そして、Ｉ／Ｆ２０９は、ネットワーク２１４と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０９には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２９】
キーボード２１０は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２１１は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００３０】
スキャナ２１２は、画像を光学的に読み取り、グラフ表示装置２００内に画像データを取り込む。なお、スキャナ２１２は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１３は、画像データや文書データを印刷する。プリンタ２１３には、たとえば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３１】
（グラフデータの具体例）
つぎに、描画対象となるグラフに関するグラフデータＤについて説明する。図３は、グラフデータの具体例を示す説明図である。図３において、グラフデータＤは、描画対象テーブル３１０と、エッジテーブル３２０と、アンカーノードテーブル３３０と、を含む情報である。
【００３２】
まず、描画対象テーブル３１０は、ノードＩＤ、属性およびラベルのフィールドを有する。各フィールドに情報を設定することで描画対象情報３１０−１〜３１０−９がレコードとして記憶されている。ここで、ノードＩＤとは、描画対象となるノードの識別子である。属性とは、ノードの特徴、性質を表す情報（方針、人の名前など）である。ラベルとは、ノードの属性を具体的に表す情報である。たとえば、ノードの属性が「方針」の場合、ラベルは「技術力の強化」などの属性の具体的な内容となる。
【００３３】
エッジテーブル３２０は、エッジＩＤ、第１端点および第２端点のフィールドを有する。各フィールドに情報を設定することで、エッジ情報３２０−１〜３２０−８がレコードとして記憶されている。ここで、エッジＩＤとは、各ノード間をつなぐエッジの識別子である。第１および第２端点は、各エッジの両端点のノードを識別するノードＩＤである。
【００３４】
アンカーノードテーブル３３０は、アンカーノードＩＤおよび属性のフィールドを有する。各フィールドに情報を設定することでアンカーノード情報３３０−１〜３３０−４がレコードとして記憶されている。ここで、アンカーノードＩＤとは、アンカーノードの識別子である。属性とは、ノード（ここでは、アンカーノード）の特徴、性質を表す情報である。
【００３５】
（グラフ表示装置の機能的構成）
つぎに、グラフ表示装置２００の機能的構成について説明する。図４は、グラフ表示装置の機能的構成を示すブロック図である。図４において、グラフ表示装置２００は、入力部４０１と、特定部４０２と、設定部４０３と、算出部４０４と、配置部４０５と、決定部４０６と、出力部４０７と、を含む構成である。この制御部となる機能（入力部４０１〜出力部４０７）は、具体的には、たとえば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０９により、その機能を実現する。また、各機能部の処理結果は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶される。
【００３６】
まず、入力部４０１は、描画対象となるグラフに関するグラフデータＤの入力を受け付ける機能を有する。グラフデータＤとは、描画対象となるノード群とノード間の接続関係を示す情報を含むものである（図３参照）。このグラフデータＤには、描画対象となるノード群のうちアンカーノードを特定するための情報（たとえば、アンカーノードテーブル３３０）が含まれていてもよい。
【００３７】
具体的には、たとえば、入力部４０１が、図２に示したキーボード２１０やマウス２１１を用いたユーザの操作入力によりグラフデータＤの入力を受け付ける。また、入力部４０１が、外部コンピュータからの受信、データベースやライブラリからの抽出によりグラフデータＤを取得することとしてもよい。なお、入力されたグラフデータＤは、たとえば、図５に示すノードテーブル５００に記憶される。
【００３８】
図５は、ノードテーブルの記憶内容の一例を示す説明図（その１）である。図５において、ノードテーブル５００は、ノードＩＤ、属性、ラベル、アンカーフラグ、パス上フラグおよび配置位置のフィールドを有する。各フィールドに情報を設定することで、ノード情報５００−１〜５００−９がレコードとして記憶されている。
【００３９】
ここで、ノードＩＤとは、描画対象となるノードの識別子である。属性とは、ノードの特徴や性質を表す情報である。ラベルとは、ノードの属性を具体的に表す情報である。アンカーフラグとは、アンカーノードを示すフラグである。このアンカーフラグは、初期状態では「Ｎ（Ｎｏ）」が設定され、アンカーノードを示す場合は「Ｙ（Ｙｅｓ）」が設定される。
【００４０】
パス上フラグとは、アンカーノードを両端とするパス上にあるフリーノードを示すフラグである。このパス上フラグは、初期状態では「Ｎ」が設定され、パス上にあるフリーノードを示す場合は「Ｙ」が設定される。配置位置は、描画領域内でのノードの配置位置を示す座標（Ｘ座標、Ｙ座標）である。
【００４１】
ここでは、図３に示したグラフデータＤが入力された結果、ノードテーブル５００内にノード情報５００−１〜５００−９が新たなレコードとして記憶されている。なお、ノードテーブル５００は、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されている。
【００４２】
図４において、特定部４０２は、描画対象となるノード群の中からアンカーノードを特定する機能を有する。具体的には、たとえば、特定部４０２が、入力されたグラフデータＤに含まれるアンカーノードテーブル３３０に基づいて、ノード群Ｎ１〜Ｎ９の中からアンカーノードＮ１〜Ｎ４を特定することにしてもよい。
【００４３】
なお、特定された特定結果は、たとえば、ノードテーブル５００に記憶される。図６は、ノードテーブルの記憶内容の一例を示す説明図（その２）である。ここでは、アンカーノードＮ１〜Ｎ４が特定された結果、ノードテーブル５００内のノードＮ１〜Ｎ４の「アンカーフラグ」フィールドに「Ｙ」が設定されている。
【００４４】
また、特定部４０２は、ノード間の接続関係に基づいて、アンカーノードを両端とするパス上にあるフリーノードを特定する機能を有する。具体的には、たとえば、特定部４０２が、まず、グラフデータＤに含まれるエッジテーブル３２０に基づいて、既存の探索アルゴリズムにより、アンカーノードを両端とするパスを探索する。そして、特定部４０２が、探索されたパス上にあるフリーノードを特定する。
【００４５】
なお、特定された特定結果は、たとえば、ノードテーブル５００に記憶される。ここでは、フリーノードＮ５，Ｎ７およびＮ８が特定された結果、ノードテーブル５００内のノードＮ５，Ｎ７およびＮ８の「パス上フラグ」フィールドに「Ｙ」が設定されている（図６参照）。
【００４６】
このノードテーブル５００によれば、描画対象となるノード群Ｎ１〜Ｎ９を、アンカーノードＮ１〜Ｎ４と、パス上にあるフリーノードＮ５，Ｎ７およびＮ８と、パス上にないフリーノードＮ６およびＮ９と、に分類することができる。なお、アンカーノード、パス上にあるフリーノードおよびパス上にないフリーノードは、ユーザの操作入力により予め指定されていてもよい。
【００４７】
なお、以下の説明において、アンカーノードを両端とするパス上にあるフリーノードを「第１のフリーノード」と表記し、パス上にないフリーノードを「第２のフリーノード」と表記する。
【００４８】
図４において、算出部４０４は、ノードの配置位置を算出する機能を有する。具体的には、たとえば、算出部４０４が、描画領域内の任意の点Ｇから等距離にアンカーノードを配置するように配置位置を算出することにしてもよい。より具体的には、描画領域が２次元の場合、算出部４０４が、描画領域内の任意の点Ｇを中心とする同一円周上にアンカーノードを配置するように配置位置を算出する。
【００４９】
この際、算出部４０４が、同一円周上に等間隔（等角度間隔）にアンカーノードを配置するように配置位置を算出することにしてもよい。たとえば、アンカーノードの個数が４個の場合、同一円周上に９０度（＝３６０÷４）間隔にアンカーノードを配置するように配置位置が算出されることになる。なお、円の半径は任意に設定されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されている。また、描画領域が３次元の場合、算出部４０４が、描画領域内の任意の点Ｇを中心とする同一球面上にアンカーノードを配置するように配置位置を算出してもよい。
【００５０】
なお、算出された算出結果は、たとえば、ノードテーブル５００に記憶される。図７は、ノードテーブルの記憶内容の一例を示す説明図（その３）である。ここでは、アンカーノードＮ１〜Ｎ４の配置位置が算出された結果、ノードテーブル５００内のノードＮ１〜Ｎ４の「配置位置」フィールドに、各ノードＮ１〜Ｎ４の配置位置が設定されている。
【００５１】
図４において、配置部４０５は、算出された算出結果に基づいて、ノードを配置する機能を有する。具体的には、たとえば、配置部４０５が、算出された算出結果に基づいて、アンカーノードを描画領域内の点Ｇを中心とする同一円周上に等間隔に配置する。なお、アンカーノード同士で何らかの関連性を有している場合は、それらアンカーノードを他のアンカーノードに比べて近づけて配置することにしてもよい。
【００５２】
設定部４０３は、第１のフリーノードの初期位置を描画領域内の任意の点に設定する機能を有する。ここで、初期位置とは、フリーノードを配置する配置位置の初期値である。第１のフリーノードの初期位置は、予め任意に設定されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されている。
【００５３】
具体的には、たとえば、第１のフリーノードの初期位置は、描画領域の原点（たとえば、画面左上）でもよく、また、アンカーノードを配置する円周の中心である点Ｇでもよい。さらに、第１のフリーノードの初期位置は、任意のレイアウト手法を用いて予め描画領域内に配置された配置位置であってもよい。
【００５４】
また、算出部４０４は、第１のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、設定された描画領域内の任意の初期位置からの第１のフリーノードの配置位置を算出する機能を有する。ここで、特徴量とは、ノード間の距離と接続関係から導き出される値であり、たとえば、第１または第２のフリーノードに及ぼす他のノード固有の仮想的な引力、斥力などである。
【００５５】
なお、以下の説明では、特に指定する場合を除いて、描画対象となるノード群を「ノード群Ｎ１〜Ｎｎ」と表記し、ノード群Ｎ１〜Ｎｎのうち任意のノードを「ノードＮｉ」と表記する（ただし、ｉ＝１，２，…，ｎ）。また、任意のノードＮｉとは異なる他のノードを「ノードＮｊ」と表記する（ただし、ｊ≠ｉ、ｊ＝１，２，…，ｎ）。
【００５６】
具体的には、たとえば、算出部４０４が、所定の力学モデルに基づいて、第１のフリーノードの配置位置を算出することにしてもよい。所定の力学モデルとして、たとえば、ノード間のエッジをバネと仮定するバネモデルを用いることにしてもよい（スプリングレイアウト）。このバネモデルでは、エッジによって直接接続されたノード間にバネ力を模した力Ｆｓ、エッジによって直接接続されていないノード間には逆２乗則の斥力によって互いに反発しあう力Ｆｒが働くと仮定する。
【００５７】
具体的には、たとえば、算出部４０４が、下記式（１）を用いて、ノードＮｉに働くＸ軸方向の力Ｆｓを算出することができる。また、算出部４０４が、下記式（２）を用いて、ノードＮｉに働くＹ軸方向の力Ｆｓを算出することができる。ただし、ｃ１はバネの自然長、ｃ２はバネの強さ係数、ＭＸはノードＮｉのＸ座標、ＭＹはノードＮｉのＹ座標、ＰＸはノードＮｊのＸ座標、ＰＹはノードＮｊのＹ座標、ｄはノードＮｉ，Ｎｊ間の距離である。
【００５８】
Ｆｘ＝Ｆｘ＋ｃ１×ｌｏｇ（ｄ／ｃ２）×（ＰＸ−ＭＸ）／ｄ      ・・・（１）
【００５９】
Ｆｙ＝Ｆｙ＋ｃ１×ｌｏｇ（ｄ／ｃ２）×（ＰＹ−ＭＹ）／ｄ      ・・・（２）
【００６０】
また、算出部４０４が、下記式（３）を用いて、ノードＮｉに働くＸ軸方向の力Ｆｒを算出することができる。また、算出部４０４が、下記式（４）を用いて、ノードＮｉに働くＹ軸方向の力Ｆｒを算出することができる。ただし、ｃ３はノード間の反発力係数である。
【００６１】
Ｆｘ＝Ｆｘ＋ｃ３／ｄ1/2×（ＰＸ−ＭＸ）／ｄ      ・・・（３）
【００６２】
Ｆｙ＝Ｆｙ＋ｃ３／ｄ1/2×（ＰＹ−ＭＹ）／ｄ      ・・・（４）
【００６３】
そして、算出部４０４が、各ノードＮｉに働く力の合計を算出し、その働く力にしたがってノードＮｉを移動させる処理を繰り返すことでノード群Ｎ１〜Ｎｎの配置位置を算出することができる。このスプリングレイアウトによれば、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
【００６４】
なお、ノードＮｉに対して力を及ぼすノードＮｊは、ノードＮｉを除く他のすべてのノードであってもよく、また、既に配置済みのノードであってもよい。ノードＮｉに対して力を及ぼすノードＮｊとして、既に配置済みのノードのみを扱う場合は、全ノードを扱う場合に比べて算出処理にかかる計算量が少なくなる。
【００６５】
算出された算出結果は、たとえば、ノードテーブル５００に記憶される。ここでは、アンカーノードＮ１〜Ｎ４の配置位置が算出された結果、ノードテーブル５００内のノードＮ１〜Ｎ４の「配置位置」フィールドに、各ノードＮ１〜Ｎ４の配置位置が設定されている（図７参照）。また、配置部４０５は、算出された算出結果に基づいて、第１のフリーノードを描画領域内に配置する。
【００６６】
また、算出部４０４は、描画領域内の同一円周上に配置されたアンカーノードを頂点とする多角形の外側に、第２のフリーノードの初期位置を算出する機能を有する。ここで、図８を用いて、第２のフリーノードの初期位置の算出例について説明する。
【００６７】
図８は、第２のフリーノードの初期位置の算出例を示す説明図である。図８において、まず、算出部４０４は、点Ｇを中心とする同一円周上に配置されたアンカーノードＮ１〜Ｎ４を頂点とする正方形の辺ｈ１の外側の点Ｓ１を、第２のフリーノードの初期位置として算出する。
【００６８】
具体的には、たとえば、算出部４０４が、点Ｓ１の位置が、辺ｈ１の中点Ｃ１と点Ｇとを結ぶ線分の長さｆ１をα倍した点の位置となるように、第２のフリーノードの初期位置を算出する。なお、上記αは、「１」より大きい任意の整数（たとえば、１．１、１．５など）であり、予め任意に設定されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されている。
【００６９】
同様に、算出部４０４が、アンカーノードＮ１〜Ｎ４を頂点とする正方形の辺ｈ２〜ｈ４の外側の点Ｓ２〜Ｓ４を、第２のフリーノードの初期位置として算出する。この結果、アンカーノードを頂点とする多角形の辺分の初期位置が算出される。なお、算出された第２のフリーノードの初期位置は、図９に示す配置位置候補テーブル９００に記憶される。
【００７０】
図９は、配置位置候補テーブルの記憶内容の一例を示す説明図である。図９において、配置位置候補テーブル９００は、第２のフリーノードＩＤ、初期位置、配置位置候補およびエッジ長のフィールドを有する。各フィールドに情報を設定することで、ノードＮ６の配置位置候補情報９００−１〜９００−４がレコードとして記憶されている。
【００７１】
ここで、第２のフリーノードＩＤとは、第２のフリーノードの識別子である。初期位置とは、第２のフリーノードの初期位置である。配置位置候補とは、第２のフリーノードの配置位置の候補である。エッジ長とは、第２のフリーノードと直接つながれている第１のフリーノードとの間のエッジの長さである。
【００７２】
ここでは、ノードＮ６の初期位置が算出された結果、配置位置候補テーブル９００内の「初期位置」フィールドに、ノードＮ６の初期位置（図８中、点Ｓ１〜Ｓ４の位置）が設定されている。なお、第２のフリーノードの初期位置は、たとえば、すべての第２のフリーノード（たとえば、ノードＮ６，Ｎ９）において共通である。
【００７３】
また、図４において、設定部４０３は、第２のフリーノードの初期位置を、算出されたアンカーノードを頂点とする多角形の外側に設定する機能を有する。具体的には、たとえば、設定部４０３が、配置位置候補テーブル９００を参照して、第２のフリーノードＮ６の初期位置を、アンカーノードＮ１〜Ｎ４を頂点とする正方形の各辺ｈ１〜ｈ４の外側に設定する。
【００７４】
また、算出部４０４は、第２のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、設定された多角形の外側の初期位置からの第２のフリーノードの配置位置を算出する機能を有する。具体的には、たとえば、まず、算出部４０４が、上述したスプリングレイアウトを用いて、設定された多角形の辺ごとの初期位置からの第２のフリーノードの配置位置候補を算出する。
【００７５】
なお、算出された第２のフリーノードの配置位置候補は、たとえば、配置位置候補テーブル９００に記憶される。ここでは、各初期位置に対応するノードＮ６の配置位置候補が算出された結果、配置位置候補テーブル９００内の「配置位置候補」フィールドに、ノードＮ６の配置位置候補が設定されている。
【００７６】
また、図４において、算出部４０４は、第２のフリーノードと直接つながれている第１のフリーノードとの間のエッジ長を算出する機能を有する。具体的には、たとえば、算出部４０４が、第２のフリーノードＮ６の配置位置候補と第１のフリーノードＮ５の配置位置を用いて、第２のフリーノードＮ６の配置位置候補ごとのエッジ長を算出することができる。
【００７７】
なお、第２のフリーノードの配置位置候補は、配置位置候補テーブル９００から特定することができる。第１のフリーノードの配置位置は、ノードテーブル５００から特定することができる。また、算出されたエッジ長は、たとえば、配置位置候補テーブル９００に記憶される。ここでは、第２のフリーノードＮ６の配置位置候補に対応するエッジ長が算出された結果、配置位置候補テーブル９００内の「エッジ長」フィールドに、第２のフリーノードＮ６と第１のフリーノードＮ５との間のエッジ長Ｌ１〜Ｌ４が設定されている。
【００７８】
図４において、決定部４０６は、算出されたエッジ長に基づいて、複数の配置位置候補の中から第２のフリーノードの配置位置を決定する機能を有する。具体的には、たとえば、決定部４０６が、複数の配置位置候補のうち、第１のフリーノードとの間のエッジ長が最短となる配置位置候補を第２のフリーノードの配置位置に決定する。なお、第１のフリーノードとの間のエッジ長が少なくともの他のエッジ長よりも短くなる配置位置候補を第２のフリーノードの配置位置に決定することにしてもよい。
【００７９】
なお、決定された決定結果は、たとえば、ノードテーブル５００に記憶される。ここでは、第２のフリーノードＮ６，Ｎ９の配置位置が決定された結果、ノードテーブル５００内のノードＮ６，Ｎ９の「配置位置」フィールドに、ノードＮ６，Ｎ９の配置位置が設定されている（図７参照）。また、配置部４０５は、決定された決定結果に基づいて、第２のフリーノードを描画領域内に配置する。
【００８０】
ここで、上記配置部４０５によって配置された配置結果に基づくグラフの具体例について説明する。図１０は、グラフの具体例を示す説明図である。図１０において、グラフ１０００は、ある企業の社員の方向性を可視化して表すグラフである。具体的には、グラフ１０００は、社員一人一人の「ありたい姿」、「ありたい姿」を実現するために「必要だと考えること」をアンケート等により収集し、これらと組織方針との類似度を元にグラフ化したものである。
【００８１】
グラフ１０００において、「組織方針」のラベルが付与されたノードＮ１〜Ｎ３がアンカーノードである。また、グラフ１０００において、「社員の名前」、「必要だと考えること」のラベルが付与されたノードＮ４〜Ｎ１４がフリーノードである。また、グラフ１０００において、「高橋」および「コストのプロ」のラベルが付与されたノードＮ７，Ｎ１１が第２のフリーノードである。
【００８２】
このグラフ１０００によれば、「組織方針」に対する各社員の立場、考え、想いなどを直感的に判断することができる。たとえば、「田中」と「山田」は、「技術力はＮｏ．１」、「仕事にチャレンジ」に対して考えや想いが結びついていることがわかる。また、「青木」は、「技術力はＮｏ．１」、「自己革新する組織」に対して考えや想いが結びついていることがわかる。一方で、「高橋」は、いずれの「組織方針」にも考えや想いが結びついていないことがわかる。なお、ここでは本手法を組織マネジメントに適用する場合について説明したが、本手法はコミュニケーション分析、グループウェアなどにも有用である。
【００８３】
出力部４０７は、配置されたノード群とノード間をつなぐエッジとに基づくグラフを出力する機能を有する。具体的には、たとえば、出力部４０７が、ノードが配置されると、その都度、配置されたノード群とノード間をつなぐエッジとに基づくグラフをディスプレイ２０８に表示することにしてもよい。
【００８４】
また、出力部４０７が、描画対象となるノード群のすべてが配置されたあと、配置されたノード群とノード間をつなぐエッジとに基づくグラフ（図１０参照）をディスプレイ２０８に表示することにしてもよい。出力形式としては、たとえば、ディスプレイ２０８への表示、プリンタ２１３への印刷出力、Ｉ／Ｆ２０９による外部装置への送信がある。また、ＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶することとしてもよい。
【００８５】
なお、上述の説明では、第２のフリーノードの初期位置を算出することにしたが、これに限らない。具体的には、たとえば、キーボード２１０やマウス２１１を用いたユーザの操作入力により、アンカーノードを頂点とする多角形の外側の任意の点を第２のフリーノードの初期位置として指定することにしてもよい。
【００８６】
また、上述したスプリング手法において、逆２乗則の斥力Ｆｒを取り除いて、すべてのノード間がバネでつながれていると仮定することにしてもよい。この手法では、各バネはノード間のグラフ理論的な距離によって決まる自然長を持つモデルとなる。このモデルでは、グラフ理論的な距離が近いノードほど近くに配置されることになる。
【００８７】
また、エッジでつながれたノード同士はノード間の距離の２乗に比例する引力Ｆａを受け、すべてのノード同士はノード間の距離に反比例する斥力Ｆｒを受けるようにモデル化する手法もある。この手法によれば、スプリング手法のアルゴリズムと同じような特徴を持つレイアウトモデルをシンプルに表現でき、計算処理の効率化を図ることができる。
【００８８】
また、レイアウトモデルに、温度の概念と、その冷却過程を導入することにしてもよい。具体的には、レイアウト計算の初期段階では、系全体の温度が高く、各要素が大きなエネルギーを持つ状態と仮定して各ノードを大きく移動させ、計算が進むにつれて、系全体の温度が低くなるため、各ノードの移動量を小さくしていく。これは、繰り返し計算一回におけるノードの移動許容距離を制限し、その許容範囲を繰り返し計算の回数が進むごとに減らしていくことで実現できる。これにより、ノードを大きく動かしすぎることを避け、計算が適切に収束に向かうことになる。
【００８９】
また、各ノードにローカルな温度を定義することにしてもよい。ノードの移動量を、そのノードの温度に基づいて決定する。ローカルな温度は、レイアウトモデルの中で、そのノードが安定状態に向かうほど低くなっていく。なお、ノードが振動や回転を続けるとレイアウト計算が収束しないため、ノードの移動に振動や回転がある場合にも低くなるようにする。
【００９０】
なお、力学モデルは基本的にバネモデルであるが、乱数による擾乱およびレイアウト中心への引力が付加されている。乱数の擾乱はレイアウトがローカルな安定状態に陥るのを避けてグローバルな安定状態へと向かうための働きを持っており、レイアウト中心への引力は接続されていないコンポーネント同士があまりにも遠くに離れてしまうことを避け、計算の収束が速くなる。
【００９１】
（グラフ表示装置のグラフ表示処理手順）
つぎに、グラフ表示装置２００のグラフ表示処理手順について説明する。図１１は、グラフ表示装置のグラフ表示処理手順の一例を示すフローチャートである。図１１のフローチャートにおいて、まず、入力部４０１により、描画対象となるグラフに関するグラフデータＤの入力を受け付けたか否かを判断する（ステップＳ１１０１）。
【００９２】
ここで、グラフデータＤの入力を待って（ステップＳ１１０１：Ｎｏ）、入力を受け付けた場合（ステップＳ１１０１：Ｙｅｓ）、特定部４０２により、描画対象となるノード群のノード情報を新たなレコードとして登録することで、ノードテーブル５００を作成する（ステップＳ１１０２）。
【００９３】
そして、特定部４０２により、描画対象となるノード群の中からアンカーノードを特定し（ステップＳ１１０３）、ノードテーブル５００内のアンカーフラグに「Ｙ」を設定する（ステップＳ１１０４）。このあと、特定部４０２により、アンカーノードを両端とするパス上にある第１のフリーノードを特定する（ステップＳ１１０５）。
【００９４】
さらに、特定部４０２により、ノードテーブル５００内のパス上フラグに「Ｙ」を設定する（ステップＳ１１０６）。そして、配置部４０５により、アンカーノードを同一円周上に等間隔に配置する（ステップＳ１１０７）。つぎに、配置部４０５により、第１のフリーノードを配置する第１のフリーノード配置処理を実行する（ステップＳ１１０８）。
【００９５】
このあと、算出部４０４により、第２のフリーノードの初期位置を算出する初期位置算出処理を実行する（ステップＳ１１０９）。そして、配置部４０５により、第２のフリーノードを配置する第２のフリーノード配置処理を実行する（ステップＳ１１１０）。最後に、出力部４０７により、配置されたノード群とノード間をつなぐエッジとに基づくグラフをディスプレイ２０８に表示して（ステップＳ１１１１）、本フローチャートによる一連の処理を終了する。
【００９６】
これにより、画面上の描画領域において、第１および第２のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にして、グラフ全体の概観を直感的に理解し易いように表示することができる。
【００９７】
＜第１のフリーノード配置処理手順＞
つぎに、図１１に示したステップＳ１１０８の第１のフリーノード配置処理の具体的処理手順について説明する。図１２は、第１のフリーノード配置処理の具体的処理手順の一例を示すフローチャートである。この第１のフリーノード配置処理は、第１のフリーノードを描画領域に配置する処理である。
【００９８】
図１２のフローチャートにおいて、まず、算出部４０４により、スプリングレイアウトのループ数Ｋを設定し（ステップＳ１２０１）、現ループ数ｋを「ｋ＝１」とする（ステップＳ１２０２）。なお、ループ数Ｋは、任意に設定されてＲＡＭ２０３、磁気ディスク２０５、光ディスク２０７などの記憶領域に記憶されている。
【００９９】
このあと、算出部４０４により、「ｉ＝１」として（ステップＳ１２０３）、ノードテーブル５００の中からノードＮｉを選択する（ステップＳ１２０４）。そして、算出部４０４により、ノードテーブル５００のパス上フラグを参照して、ノードＮｉが第１のフリーノードか否かを判断する（ステップＳ１２０５）。
【０１００】
ここで、第１のフリーノードではない場合（ステップＳ１２０５：Ｎｏ）、ステップＳ１２１３に移行する。一方、第１のフリーノードの場合（ステップＳ１２０５：Ｙｅｓ）、設定部４０３により、ノードＮｉの初期位置を描画領域内の任意の点に設定する（ステップＳ１２０６）。
【０１０１】
このあと、算出部４０４により、ノードＮｉに働く力を算出する働く力算出処理を実行する（ステップＳ１２０７）。そして、算出部４０４により、ノードＮｉの配置位置（Ｘｉ，Ｙｉ）を「Ｘｉ＝Ｘｉ＋Ｆｘ，Ｙｉ＝Ｙｉ＋Ｆｙ」とする（ステップＳ１２０８）。つぎに、配置部４０５により、ノードＮｉを描画領域内に配置し（ステップＳ１２０９）、エッジテーブル３２０を参照して、ノード間をエッジでつなぐ（ステップＳ１２１０）。
【０１０２】
このあと、算出部４０４により、ｋをインクリメントして（ステップＳ１２１１）、「ｋ＞Ｋ」か否かを判断する（ステップＳ１２１２）。ここで、「ｋ≦Ｋ」の場合（ステップＳ１２１２：Ｎｏ）、ステップＳ１２０７に戻る。一方、「ｋ＞Ｋ」の場合（ステップＳ１２１２：Ｙｅｓ）、算出部４０４により、ｉをインクリメントして（ステップＳ１２１３）、「ｉ＞ｎ」か否かを判断する（ステップＳ１２１４）。
【０１０３】
ここで、「ｉ≦ｎ」の場合（ステップＳ１２１４：Ｎｏ）、ステップＳ１２０４に戻る。一方、「ｉ＞ｎ」の場合（ステップＳ１２１４：Ｙｅｓ）、図１１に示したステップＳ１１０９に移行する。
【０１０４】
これにより、画面上の描画領域において、第１のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
【０１０５】
＜働く力算出処理手順＞
つぎに、図１２に示したステップＳ１２０７（または、図１５−２に示すステップＳ１５０９）の働く力算出処理の具体的処理手順について説明する。図１３は、働く力算出処理の具体的処理手順の一例を示すフローチャートである。この働く力算出処理は、ノードＮｉに働く力からノードＮｉの初期位置からの移動量を算出するための処理である。
【０１０６】
図１３のフローチャートにおいて、まず、算出部４０４により、「ＭＸ＝Ｘｉ，ＭＹ＝Ｙｉ」とし（ステップＳ１３０１）、「Ｆｘ＝０，Ｆｙ＝０」とする（ステップＳ１３０２）。なお、ＸｉおよびＹｉは、図１２に示したステップＳ１２０６において設定されたノードＮｉの初期位置のＸ座標およびＹ座標である。また、ＦｘはノードＮｉに働くＸ軸方向の力、ＦｙはノードＮｉに働くＹ軸方向の力である。
【０１０７】
このあと、算出部４０４により、「ｊ＝１」として（ステップＳ１３０３）、「ｉ＝ｊ」か否かを判断する（ステップＳ１３０４）。ここで、「ｉ＝ｊ」の場合（ステップＳ１３０４：Ｙｅｓ）、ステップＳ１３１４に移行する。
【０１０８】
一方、「ｉ≠ｊ」の場合（ステップＳ１３０４：Ｎｏ）、算出部４０４により、ノードＮｊが配置済みか否かを判断する（ステップＳ１３０５）。具体的には、たとえば、算出部４０４が、ノードテーブル５００内のノードＮｊの配置位置フィールドに情報が設定されている場合、ノードＮｊが配置済みと判断する。
【０１０９】
ここで、ノードＮｊが未配置の場合（ステップＳ１３０５：Ｎｏ）、ステップＳ１３１４に移行する。一方、ノードＮｊが配置済みの場合（ステップＳ１３０５：Ｙｅｓ）、算出部４０４により、ノードテーブル５００の中からノードＮｊを選択する（ステップＳ１３０６）。
【０１１０】
このあと、算出部４０４により、「ＰＸ＝Ｘｊ，ＰＹ＝Ｙｊ」とする（ステップＳ１３０７）。なお、ＸｊおよびＹｊは、ノードテーブル５００内のノードＮｊの配置位置のＸ座標およびＹ座標である。そして、算出部４０４により、ノードＮｉの初期位置およびノードＮｊの配置位置に基づいて、ノードＮｉ，Ｎｊ間の距離ｄを算出する（ステップＳ１３０８）。
【０１１１】
つぎに、算出部４０４により、エッジテーブル３２０を参照して、ノードＮｉ，Ｎｊ間は直接つながっているか否かを判断する（ステップＳ１３０９）。ここで、直接つながっている場合（ステップＳ１３０９：Ｙｅｓ）、算出部４０４により、上記式（１）を用いて、ノードＮｉに働くＸ軸方向の力Ｆｘを算出する（ステップＳ１３１０）。さらに、算出部４０４により、上記式（２）を用いて、ノードＮｉに働くＹ軸方向の力Ｆｙを算出する（ステップＳ１３１１）。
【０１１２】
一方、ステップＳ１３０９において、直接つながっていない場合（ステップＳ１３０９：Ｎｏ）、算出部４０４により、上記式（３）を用いて、ノードＮｉに働くＸ軸方向の力Ｆｘを算出する（ステップＳ１３１２）。さらに、算出部４０４により、上記式（４）を用いて、ノードＮｉに働くＹ軸方向の力Ｆｙを算出する（ステップＳ１３１３）。
【０１１３】
このあと、算出部４０４により、ｊをインクリメントして（ステップＳ１３１４）、「ｊ＞ｎ」か否かを判断する（ステップＳ１３１５）。ここで、「ｊ≦ｎ」の場合（ステップＳ１３１５：Ｎｏ）、ステップＳ１３０４に戻る。一方、「ｊ＞ｎ」の場合（ステップＳ１３１５：Ｙｅｓ）、図１２に示したステップＳ１２０８（または、図１５−２に示すステップＳ１５１０）に移行する。
【０１１４】
これにより、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
【０１１５】
＜初期位置算出処理手順＞
つぎに、図１１に示したステップＳ１１０９の初期位置算出処理の具体的処理手順について説明する。図１４は、初期位置算出処理の具体的処理手順の一例を示すフローチャートである。この初期位置算出処理は、同一円周上に配置されたアンカーノードを頂点とする多角形の各辺の外側の第２のフリーノードの初期位置を算出する処理である。
【０１１６】
図１４のフローチャートにおいて、まず、算出部４０４により、「ＣＸ＝ＸO，ＣＹ＝ＹO」とする（ステップＳ１４０１）。なお、ＸOおよびＹOは、画面上での描画領域の中心を表す点ＧのＸ座標およびＹ座標である。そして、算出部４０４により、アンカーノードを配置順にソートして、アンカーノードＡＮ１〜ＡＮｍとする（ステップＳ１４０２）。
【０１１７】
このあと、算出部４０４により、「ｐ＝１」とし（ステップＳ１４０３）、さらに、「ｑ＝ｐ＋１」とする（ステップＳ１４０４）。そして、算出部４０４により、ノードテーブル５００の中からアンカーノードＡＮｐを選択する（ステップＳ１４０５）。ただし、ここではアンカーノードＡＮｐの配置位置を（ＡＸｐ，ＡＹｐ）とする。
【０１１８】
また、算出部４０４により、ノードテーブル５００の中からアンカーノードＡＮｑを選択する（ステップＳ１４０６）。ただし、ここではアンカーノードＡＮｑの配置位置を（ＡＸｑ，ＡＹｑ）とする。そして、算出部４０４により、「ＳＸｐ＝ＣＸ，ＳＹｐ＝ＣＹ」とする（ステップＳ１４０７）。なお、ＳＸｐおよびＳＹｐは、第２のフリーノードの初期位置のＸ座標およびＹ座標である。
【０１１９】
このあと、算出部４０４により、「ＳＸｐ＝ＣＸ＋α（ＡＸｑ−ＡＸｐ−ＣＸ）」を算出する（ステップＳ１４０８）。また、算出部４０４により、「ＳＹｐ＝ＣＹ＋α（ＡＹｑ−ＡＹｐ−ＣＹ）」を算出する（ステップＳ１４０９）。なお、ステップＳ１４０８およびＳ１４０９において算出された算出結果は、たとえば、配置位置候補テーブル９００内の配置位置候補フィールドに設定される。
【０１２０】
つぎに、算出部４０４により、ｐをインクリメントして（ステップＳ１４１０）、「ｐ≧ｍ」か否かを判断する（ステップＳ１４１１）。ここで、「ｐ＜ｍ」の場合（ステップＳ１４１１：Ｎｏ）、ステップＳ１４０４に戻る。一方、「ｐ≧ｍ」の場合（ステップＳ１４１１：Ｙｅｓ）、図１１に示したステップＳ１１１０に移行する。
【０１２１】
これにより、アンカーノードを頂点とする多角形の外側に設定する第２のフリーノードの初期位置を網羅的かつ効率的に自動算出することができる。
【０１２２】
＜第２のフリーノード配置処理手順＞
つぎに、図１１に示したステップＳ１１１０の第２のフリーノード配置処理の具体的処理手順について説明する。図１５−１および図１５−２は、第２のフリーノード配置処理の具体的処理手順の一例を示すフローチャートである。この第２のフリーノード配置処理は、第２のフリーノードを描画領域に配置する処理である。
【０１２３】
図１５−１のフローチャートにおいて、まず、算出部４０４により、スプリングレイアウトのループ数Ｋを設定し（ステップＳ１５０１）、現ループ数ｋを「ｋ＝１」とする（ステップＳ１５０２）。このあと、算出部４０４により、「ｉ＝１」として（ステップＳ１５０３）、ノードテーブル５００の中からノードＮｉを選択する（ステップＳ１５０４）。
【０１２４】
そして、算出部４０４により、ノードテーブル５００のアンカーフラグを参照して、ノードＮｉがアンカーノードか否かを判断する（ステップＳ１５０５）。ここで、アンカーノードの場合（ステップＳ１５０５：Ｙｅｓ）、図１５−２に示すステップＳ１５１８に移行する。
【０１２５】
一方、アンカーノードではない場合（ステップＳ１５０５：Ｎｏ）、算出部４０４により、ノードテーブル５００のパス上フラグを参照して、ノードＮｉが第１のフリーノードか否かを判断する（ステップＳ１５０６）。ここで、第１のフリーノードの場合（ステップＳ１５０６：Ｙｅｓ）、図１５−２に示すステップＳ１５１８に移行する。一方、第１のフリーノードではない場合（ステップＳ１５０６：Ｎｏ）、設定部４０３により、「ｐ＝１」として（ステップＳ１５０７）、図１５−２に示すステップＳ１５０８に移行する。
【０１２６】
図１５−２のフローチャートにおいて、まず、設定部４０３により、配置位置候補テーブル９００を参照して、ノードＮｉの初期位置「Ｘｉ（ｐ）＝ＳＸｐ，Ｙｉ（ｐ）＝ＳＹｐ」を設定する（ステップＳ１５０８）。ただし、Ｘｉ（ｐ）およびＹｉ（ｐ）は、ノードＮｉの初期位置のＸ座標およびＹ座標である。
【０１２７】
このあと、算出部４０４により、ノードＮｉに働く力を算出する働く力算出処理を実行する（ステップＳ１５０９）。そして、算出部４０４により、ノードＮｉの配置位置（Ｘｉ（ｐ），Ｙｉ（ｐ））を「Ｘｉ（ｐ）＝Ｘｉ（ｐ）＋Ｆｘ，Ｙｉ（ｐ）＝Ｙｉ（ｐ）＋Ｆｙ」とする（ステップＳ１５１０）。
【０１２８】
つぎに、配置部４０５により、ノードＮｉを描画領域内に配置し（ステップＳ１５１１）、エッジテーブル３２０を参照して、ノード間をエッジでつなぐ（ステップＳ１５１２）。このあと、算出部４０４により、ｋをインクリメントして（ステップＳ１５１３）、「ｋ＞Ｋ」か否かを判断する（ステップＳ１５１４）。
【０１２９】
ここで、「ｋ≦Ｋ」の場合（ステップＳ１５１４：Ｎｏ）、ステップＳ１５０９に戻る。一方、「ｋ＞Ｋ」の場合（ステップＳ１５１４：Ｙｅｓ）、算出部４０４により、ｐをインクリメントして（ステップＳ１５１５）、「ｐ＞ｍ」か否かを判断する（ステップＳ１５１６）。
【０１３０】
ここで、「ｐ≦ｍ」の場合（ステップＳ１５１６：Ｎｏ）、ステップＳ１５０８に戻る。一方、「ｐ＞ｍ」の場合（ステップＳ１５１６：Ｙｅｓ）、決定部４０６により、複数の配置位置候補の中からノードＮｉの配置位置を決定する配置位置決定処理を実行する（ステップＳ１５１７）。
【０１３１】
このあと、算出部４０４により、ｉをインクリメントして（ステップＳ１５１８）、「ｉ＞ｎ」か否かを判断する（ステップＳ１５１９）。ここで、「ｉ≦ｎ」の場合（ステップＳ１５１９：Ｎｏ）、図１５−１に示したステップＳ１５０４に戻る。一方、「ｉ＞ｎ」の場合（ステップＳ１５１９：Ｙｅｓ）、図１１に示したステップＳ１１１１に移行する。
【０１３２】
これにより、画面上の描画領域において、第２のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
【０１３３】
＜配置位置決定処理手順＞
つぎに、図１５−２に示したステップＳ１５１７の配置位置決定処理の具体的処理手順について説明する。図１６は、配置位置決定処理の具体的処理手順の一例を示すフローチャートである。この配置位置決定処理は、複数の配置位置候補の中からノードＮｉの配置位置を決定する処理である。
【０１３４】
図１６のフローチャートにおいて、まず、算出部４０４により、「ｐ＝１」とする（ステップＳ１６０１）。そして、算出部４０４により、ノードＮｉと直接つながれている第１のフリーノードとの間のエッジ長Ｌｐを算出する（ステップＳ１６０２）。なお、算出されたエッジ長Ｌｐは、配置位置候補テーブル９００に登録される。
【０１３５】
このあと、算出部４０４により、ｐをインクリメントして（ステップＳ１６０３）、「ｐ＞ｍ」か否かを判断する（ステップＳ１６０４）。ここで、「ｐ≦ｍ」の場合（ステップＳ１６０４：Ｎｏ）、ステップＳ１６０２に戻る。
【０１３６】
一方、「ｐ＞ｍ」の場合（ステップＳ１６０４：Ｙｅｓ）、決定部４０６により、配置位置候補テーブル９００内のエッジ長フィールドを参照して、エッジ長Ｌ１〜Ｌｍの中から最短のエッジ長Ｌｐを特定する（ステップＳ１６０５）。そして、決定部４０６により、ノードＮｉの配置位置「Ｘｉ＝Ｘｉ（ｐ），Ｙｉ＝Ｙｉ（ｐ）」を決定して（ステップＳ１６０６）、図１５−２に示したステップＳ１５１８に移行する。
【０１３７】
これにより、第２のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とが同程度となる配置位置を適切に決めることができる。
【０１３８】
以上説明したように、本実施の形態では、同一円周上に配置されたアンカーノードを頂点とする多角形の外側に第２のフリーノードの初期位置を設定し、他のノードとの接続関係に応じた特徴量に基づいて、第２のフリーノードの配置位置を算出する。これにより、画面上の描画領域において、第２のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることができる。
【０１３９】
また、本実施の形態では、多角形の各辺の外側に初期位置を設定して、第２のフリーノードの複数の配置位置候補を算出し、第２のフリーノードに直接つながれた第１のフリーノードとの間のエッジ長が最短となる配置位置候補を第２のフリーノードの配置位置に決定してもよい。これにより、第２のフリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とが同程度となる配置位置を適切に決めることができる。
【０１４０】
また、本実施の形態では、アンカーノードを同一円周上に等間隔に配置することにしてもよい。これにより、互いに接続関係のない複数のアンカーノードを描画領域内に均等に配置して、グラフ全体の概観をより直感的に理解し易いように表示することができる。
【０１４１】
また、本実施の形態では、第１または第２のフリーノードと他のノードとがエッジでつながれている場合、ノード間の距離に応じて働く引力に基づいて、第１または第２のフリーノードの配置位置を算出してもよい。また、本実施の形態では、第１または第２のフリーノードと他のノードとがエッジでつながれていない場合、ノード間の距離に応じて働く斥力に基づいて、第１または第２のフリーノードの配置位置を算出してもよい。これにより、ノード間が近づきすぎず、エッジによって直接接続されたノードが近くに配置され、かつ、ノード間のエッジの長さが均一化された対称的なレイアウトを得ることができる。
【０１４２】
また、本実施の形態では、同一円周上に配置されたアンカーノードの配置位置に基づいて、アンカーノードを頂点とする多角形の外側に設定する第２のフリーノードの初期位置を網羅的かつ効率的に自動算出することができる。
【０１４３】
以上のことから、本実施の形態にかかるグラフ表示プログラムおよびグラフ表示方法によれば、各フリーノードからアンカーノードに辿り着くまでのエッジ数とノード間の距離とを同程度にすることにより、グラフ全体の概観を直感的に理解し易いように表示することができる。
【０１４４】
なお、本実施の形態で説明したグラフ表示方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本グラフ表示プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本グラフ表示プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１４５】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１４６】
（付記１）アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータを、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第１のフリーノードと、当該パス上にない第２のフリーノードとに分類する分類手段、
前記アンカーノードを描画領域内の任意の点から等距離に配置する第１の配置手段、
前記分類手段によって分類された第１のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内の任意の初期位置からの前記第１のフリーノードの配置位置を算出する第１の算出手段、
前記第１の配置手段によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類手段によって分類された第２のフリーノードの初期位置を設定する設定手段、
前記第２のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記設定手段によって設定された初期位置からの前記第２のフリーノードの配置位置を算出する第２の算出手段、
前記第１および第２の算出手段によって算出された算出結果に基づいて、前記第１および第２のフリーノードを前記描画領域内に配置する第２の配置手段、
として機能させることを特徴とするグラフ表示プログラム。
【０１４７】
（付記２）前記設定手段は、前記多角形の各辺の外側に前記第２のフリーノードの初期位置を設定し、
前記第２の算出手段は、前記第２のフリーノードごとに、前記設定手段によって設定された多角形の辺ごとの初期位置からの前記第２のフリーノードの複数の配置位置を算出し、
前記第２の配置手段は、前記第２の算出手段によって算出された第２のフリーノードごとの複数の配置位置である配置位置候補と当該第２のフリーノードに直接つながれた前記第１のフリーノードの配置位置から得られる当該ノード間をつなぐエッジの長さに基づいて、前記複数の配置位置候補の中から、前記第２のフリーノードの配置位置を選択して前記描画領域内に配置することを特徴とする付記１に記載のグラフ表示プログラム。
【０１４８】
（付記３）前記第２の配置手段は、前記複数の配置位置候補の中から、前記エッジの長さが最短となる配置位置候補を前記第２のフリーノードの配置位置として選択することを特徴とする付記２に記載のグラフ表示プログラム。
【０１４９】
（付記４）前記第１の配置手段は、前記アンカーノードを前記描画領域内の同一円周上に等間隔に配置することを特徴とする付記１〜３のいずれか一つに記載のグラフ表示プログラム。
【０１５０】
（付記５）前記第１および第２の算出手段は、前記第１または第２のフリーノードと前記他のノードとがエッジでつながれている場合、前記ノード間の距離に応じて働く仮想的な引力に基づいて、前記第１または第２のフリーノードの配置位置を算出することを特徴とする付記１〜４のいずれか一つに記載のグラフ表示プログラム。
【０１５１】
（付記６）前記第１および第２の算出手段は、前記第１または第２のフリーノードと前記他のノードとがエッジでつながれていない場合、前記ノード間の距離に応じて働く仮想的な斥力に基づいて、前記第１または第２のフリーノードの配置位置を算出することを特徴とする付記１〜５のいずれか一つに記載のグラフ表示プログラム。
【０１５２】
（付記７）前記設定手段は、前記第１の配置手段によって配置されたアンカーノードの配置位置に基づいて、前記多角形の各辺の外側の前記第２のフリーノードの初期位置を算出し、当該算出された初期位置に前記第２のフリーノードの初期位置を設定することを特徴とする付記１〜６のいずれか一つに記載のグラフ表示プログラム。
【０１５３】
（付記８）アンカーノードおよびフリーノードを含むノード群と、当該ノード間をつなぐエッジとに基づくグラフを表示するコンピュータが、
前記フリーノードを、前記アンカーノードを両端とするパス上にある第１のフリーノードと、当該パス上にない第２のフリーノードとに分類する分類工程と、
前記アンカーノードを描画領域内の任意の点から等距離に配置する第１の配置工程と、
前記分類工程によって分類された第１のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記描画領域内の任意の初期位置からの前記第１のフリーノードの配置位置を算出する第１の算出工程と、
前記第１の配置工程によって配置されたアンカーノードを頂点とする多角形の外側に、前記分類工程によって分類された第２のフリーノードの初期位置を設定する設定工程と、
前記第２のフリーノードとは異なる他のノードとの接続関係に応じた特徴量に基づいて、前記設定工程によって設定された初期位置からの前記第２のフリーノードの配置位置を算出する第２の算出工程と、
前記第１および第２の算出工程によって算出された算出結果に基づいて、前記第１および第２のフリーノードを前記描画領域内に配置する第２の配置工程と、
を実行することを特徴とするグラフ表示方法。
【符号の説明】
【０１５４】
２００  グラフ表示装置
３１０  描画対象テーブル
３２０  エッジテーブル
３３０  アンカーノードテーブル
４０１  入力部
４０２  特定部
４０３  設定部
４０４  算出部
４０５  配置部
４０６  決定部
４０７  出力部
５００  ノードテーブル
９００  配置位置候補テーブル
【図１】
0005423293.tif 000002
【図２】
0005423293.tif 000003
【図３】
0005423293.tif 000004
【図４】
0005423293.tif 000005
【図５】
0005423293.tif 000006
【図６】
0005423293.tif 000007
【図７】
0005423293.tif 000008
【図８】
0005423293.tif 000009
【図９】
0005423293.tif 000010
【図１０】
0005423293.tif 000011
【図１１】
0005423293.tif 000012
【図１２】
0005423293.tif 000013
【図１３】
0005423293.tif 000014
【図１４】
0005423293.tif 000015
【図１５−１】
0005423293.tif 000016
【図１５−２】
0005423293.tif 000017
【図１６】
0005423293.tif 000018
【図１７】
0005423293.tif 000019