(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-05-10
(45)【発行日】2023-05-18
(54)【発明の名称】描画方法、描画プログラムおよび描画装置
(51)【国際特許分類】
G06T 11/20 20060101AFI20230511BHJP
G06F 30/10 20200101ALI20230511BHJP
【FI】
G06T11/20 600
G06F30/10
(21)【出願番号】P 2019100763
(22)【出願日】2019-05-29
【審査請求日】2022-02-08
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】110002147
【氏名又は名称】弁理士法人酒井国際特許事務所
(72)【発明者】
【氏名】小林 紀之
【審査官】板垣 有紀
(56)【参考文献】
【文献】特開2010-044617(JP,A)
【文献】特開2007-193380(JP,A)
【文献】米国特許出願公開第2003/0011601(US,A1)
【文献】櫻庭 祐一 他,階層的レイアウトを用いたネットワークトポロジの表示方法,情報処理学会研究報告 平成22年度▲1▼ [CD-ROM] ,日本,社団法人情報処理学会,2010年06月15日
(58)【調査した分野】(Int.Cl.,DB名)
G06T 11/20
G06F 30/10
G06F 3/01
G06F 3/048 - 3/04895
G06F 30/10
G06T 1/00 - 5/50
(57)【特許請求の範囲】
【請求項1】
コンピュータが、
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定し、
特定した
前記描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
特定した
前記描画範囲
の外に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
前記データ構造の各ノードを配置したグラフデータを生成する
処理を実行することを特徴とする描画方法。
【請求項2】
前記複数のノードそれぞれに付与される属性に基づき、同じ属性を有するノードを集約させた複数の集合を生成し、
前記複数の集合間の関係性に基づき、前記複数の集合それぞれを配置し、各集合内に属するノードである各所属ノードを、スプリングアルゴリズムによって配置し、
各集合内に属するノードを配置した後、いずれの集合内にも属さないノードである各無所属ノードを、前記スプリングアルゴリズムによって配置して、前記グラフデータを生成する、処理を前記コンピュータが実行することを特徴とする請求項1に記載の描画方法。
【請求項3】
前記配置する処理は、前記複数の集合間の関係性に基づき、複数の配置パターンを生成し、前記複数の配置パターンそれぞれについて、前記各所属ノードを配置し、
前記生成する処理は、前記各所属ノードが配置された前記複数の配置パターンそれぞれについて前記各無所属ノードを配置し、前記各所属ノードおよび前記各無所属ノードが配置された前記複数の配置パターンそれぞれのうち、前記各集合の範囲の中心と前記各集合に属するノードの距離の2乗の平均が最も小さい配置パターン、または、ノード間の距離の標準偏差が最も小さい配置パターンを、前記グラフデータに選択することを特徴とする請求項2に記載の描画方法。
【請求項4】
前記複数の配置パターンそれぞれについて、集合が存在しない位置に、当該位置の周辺に位置する近接集合を配置した複数の拡張配置パターンを生成する処理を、前記コンピュータが実行し、
前記配置する処理は、前記複数の拡張配置パターンそれぞれについて、前記各所属ノードを配置し、
前記生成する処理は、前記各所属ノードが配置された前記複数の拡張配置パターンそれぞれについて前記各無所属ノードを配置し、前記各所属ノードおよび前記各無所属ノードが配置された前記複数の拡張配置パターンそれぞれから、前記グラフデータに選択することを特徴とする請求項3に記載の描画方法。
【請求項5】
コンピュータに、
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定し、
特定した
前記描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
特定した
前記描画範囲
の外に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
前記データ構造の各ノードを配置したグラフデータを生成する
処理を実行させることを特徴とする描画プログラム。
【請求項6】
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定する特定部と、
特定した
前記描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、特定した
前記描画範囲
の外に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させて、前記データ構造の各ノードを配置したグラフデータを生成する配置部と
を有することを特徴とする描画装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、描画方法、描画プログラムおよび描画装置に関する。
【背景技術】
【0002】
ソフトウェアの構成やデータの構成などを描画するグラフ描画アルゴリズムを利用した力学モデルが利用されている。近年では、ノードとノードを接続するエッジとから成るグラフデータであって、ノード間には斥力を発生させ、エッジには引力を発生させることで、関係のあるノードは近く、関係の薄いノードは遠くに配置するスプリングアルゴリズムが知られている。また、親と子の関係を有するツリー上に記述する階層型データモデルや、グラフの一部を一つのまとまりとしてとらえ、さらにその上位でそれらのまとまりの一部を一つのまとまりとしてとらえることを繰り返すことで、グラフ全体の構造を示す階層型グラフ描画などが知られている。
【先行技術文献】
【特許文献】
【0003】
【文献】特開平8-030799号公報
【文献】特開平11-144071号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、上記技術では、視覚的に理解しやすいグラフを描画することが難しい。具体的には、力学モデルで描画すると、全体にバランスよく配置されるが、属性間の関係は視覚的にわかりにくい。
【0005】
例えば、スプリングアルゴリズムでは、同じ属性のノードが散らばってしまうため、人が特徴を見分けにくく、描画のたびにノードの場所が大きく変わってしまう。階層型データモデルでは、親と子が1対多の関係しか許容されていないので、汎用性が低く、階層型グラフ描画では、構造は見やすくなるが、属性を意識していないので、属性間の関係性を描画できない。
【0006】
一つの側面では、視覚的に理解しやすいグラフを描画することができる描画方法、描画プログラムおよび描画装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
第1の案では、描画方法は、コンピュータが、データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定する処理を実行する。描画方法は、コンピュータが、特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させる処理を実行する。描画方法は、コンピュータが、特定した描画範囲に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させる処理を実行する。描画方法は、コンピュータが、前記データ構造の各ノードを配置したグラフデータを生成する処理を実行する。
【発明の効果】
【0008】
一実施形態によれば、視覚的に理解しやすいグラフを描画することができる。
【図面の簡単な説明】
【0009】
【
図1】
図1は、実施例1にかかる描画装置の機能構成を示す機能ブロック図である。
【
図2】
図2は、実施例1にかかるグラフ描画を説明する図である。
【
図3】
図3は、グラフ表記のルールを説明する図である。
【
図4】
図4は、グラフ表記のルールを説明する図である。
【
図5】
図5は、全体的な処理の流れを示すフローチャートである。
【
図6】
図6は、ノードの集合と関係性の検出処理の流れを示すフローチャートである。
【
図7】
図7は、ノードの集合と関係性の検出処理を説明する図である。
【
図8】
図8は、集合の配置の組み合わせの探索処理の流れを示すフローチャートである。
【
図9】
図9は、集合の配置の組み合わせの探索処理を説明する図である。
【
図10】
図10は、集合の配置範囲を拡張した組み合わせの探索処理の流れを示すフローチャートである。
【
図11】
図11は、集合の配置範囲の拡張探索を説明する図である。
【
図12】
図12は、集合の配置範囲の拡張探索結果を説明する図である。
【
図13】
図13は、ノードの配置処理の流れを示すフローチャートである。
【
図14】
図14は、ノードの配置の具体例1を説明する図である。
【
図15】
図15は、ノードの配置の具体例1を説明する図である。
【
図16】
図16は、ノードの配置の具体例2を説明する図である。
【
図17】
図17は、ノードの配置の具体例2を説明する図である。
【発明を実施するための形態】
【0010】
以下に、本願の開示する描画方法、描画プログラムおよび描画装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例1】
【0011】
[描画装置の機能構成]
図1は、実施例1にかかる描画装置10の機能構成を示す機能ブロック図である。
図1に示す描画装置10は、ソフトウェアの構成、データの構成、ネットワークの構成、属性間の関係性などの各種データ構造を描画するグラフ描画装置の一例であり、例えばサーバ装置などである。この描画装置は、ノードの集合と、ノード間の関係を示すエッジの集合で表されるデータ構造を、一定の範囲内に、人間が見やすく自動配置する。
【0012】
ここで、描画装置10のグラフ描画について説明する。
図2は、実施例1にかかるグラフ描画を説明する図である。
図2は、属性を四角または楕円で示し、ノードを円で示す。
図2の(a)に示すように、一般的な力学モデルを用いてデータ構造を描画すると、全体的にバランスよく配置されるが、属性間の関係は視覚的にわかりにくい。つまり、属性とノードとのつながりはわかりやすく、どの属性がどのノードを有するかは、視覚的に認識しやすい。しかし、属性間では、つながりがあるかないかはわかるものの、そのつながりがどのような関係性を有するのかまでを視覚的に認識することが難しい。
【0013】
また、
図2の(b)に示すように、属性ごとにまとめようとすると、ノードが複数の属性を有することがあるので、すべてのノードがまとまってしまう可能性がある。例えば、
図2の(b)では、属性として「性別」、「職業」、「趣味」、「住所」を有する各ノードについて、それぞれのノードがいずれか1つの属性で共通しているので、同じ属性を近づけようとすると、4つのノードが1つの場所にまとまってしまい、関係性を把握することができない。
【0014】
また、
図2の(c)に示すように、スプリングアルゴリズムなどを用いて、属性に引力をつけてまとめようとすると、引力が強いと図のように団子になってしまい、弱いとノードの反発力のほうが強くなってしまい、ノードが集合しない。また、ノード間の関係がないにも関わらず、同じ属性のノード同士がくっついてしまうので、関係があるように見えてしまることがある。また、複数属性を持っているノードもあるので、関係ないノードも集合の一部として見えてしまうことがある。
【0015】
そこで、実施例1にかかる描画装置10は、ノードの属性ごとに集合を生成し、集合間に閾値(R%)の有向性の関係がある場合、その関係を記録する。そして、描画装置10は、求めた関係性をもとに集合間の位置の組み合わせを求め、求めた位置関係を保持したまま、集合に属するノードを描画する。その後、描画装置10は、残りのノードを描画した後、描画した配置をもとに、最も安定している配置を採用する。このようにすることで、
図2の(d)に示すように、描画装置10は、意味的に関係のある属性のノードを優先して描画することで、ユーザに直感的に理解しやすくさせることができる。
【0016】
図1に戻り、描画装置10は、通信部11、記憶部12、制御部20を有する。通信部11は、他の装置の間の通信を制御する処理部であり、例えば通信インタフェースなどである。例えば、通信部11は、描画対象のデータを管理端末から受信し、描画結果を管理端末に送信する。
【0017】
記憶部12は、データや制御部20が実行するプログラムを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。例えば、記憶部12は、ノードデータDB13、集合データDB14、エッジ情報DB15、配置結果DB16を有する。また、記憶部12は、描画対象のデータの構造などを含む情報を記憶する。
【0018】
ノードデータDB13は、描画対象のデータ構造におけるノードに関する情報を記憶するデータベースである。具体的には、ノードデータDB13は、ノードごとに、各ノードに設定される属性を記憶する。例えば、ノードデータDB13は、「ノード、属性」として「ノードA、属性(性別:男性、職業:会社員)」などを記憶する。また、ノードデータDB13は、制御部20によって生成されたグラフ構造のノードに関する情報として、接続されるノードに発生させる斥力などを記憶する。
【0019】
集合データDB14は、ノードの集合に関する情報を記憶するデータベースである。例えば、集合データDB14は、制御部20によって生成された集合ごとに、当該集合に属するノードや集合の属性などを記憶する。
【0020】
エッジ情報DB15は、エッジに関する情報を記憶するデータベースである。例えば、集合データDB14は、制御部20によって生成されたグラフ構造のエッジに関する情報として、接続されるノード、エッジに発生させる引力などを記憶する。
【0021】
配置結果DB16は、グラフ構造の配置結果を記憶するデータベースである。例えば、配置結果DB16は、制御部20によって生成されたグラフ構造に関する情報として、ノード、ノードの集合、ノード間のエッジ、集合間のエッジなどの関する情報を記憶する。
【0022】
制御部20は、描画装置10全体を司る処理部であり、例えばプロセッサなどである。この制御部20は、検出部21、探索部22、拡張探索部23、配置部24を有する。なお、検出部21、探索部22、拡張探索部23、配置部24は、プロセッサが有する電子回路やプロセッサが実行するプロセスの一例などである。
【0023】
ここで、本実施例で使用するグラフ表記について説明する。
図3と
図4は、グラフ表記のルールを説明する図である。
図3に示すように、一例として、集合A
11、A
12、A
13、A
21、A
22を有し、集合A
11と集合A
12との間は関係x
11を有し、集合A
12と集合A
13との間は関係x
12を有し、集合A
11と集合A
21との間は関係y
11を有し、集合A
13と集合A
22との間は関係z
22を有するとする。また、集合A
11には、ノードn2、n3、n4が含まれ、集合A
12には、ノードn5、n6が含まれ、集合A
13には、ノードn7、n8が含まれ、集合A
21には、ノードn1が含まれ、集合A
22には、ノードn9が含まれるとする。なお、見やすくするなどの便宜上、各領域を同じ大きさの長方形にしているが、形、大きさともに同じである必要はない。
【0024】
このようなグラフ構造において、集合の行列を
図4の(a)のように表記し、関係性の行列を
図4の(b)のように表記するものとする。ここで、A
ijは、i行j列に属するノードの集合である。x
ijは、i行j列の集合とi行(j+1)列の集合との関係であり、y
ijは、i行j列の集合と(i+1)行j列の集合との関係である。z
ijは、i行j列の集合と(i+1)行(j+1)列の集合との関係、もしくは、i行(j+1)列の集合と(i+1)行j列の集合との関係である。なお、集合の配置の段階でクロスの関係性は許容しないこととする。
【0025】
また、集合の行列において、ノードが存在する場所には1が設定され、ノードがない場所には0が設定される。具体的には、
図3においては集合A
11、A
12、A
13、A
21、A
22が存在し、集合A
23が存在しないことから、
図4の(a)に示す集合の行列においては、集合A
11、A
12、A
13、A
21、A
22のそれぞれの位置には1が設定され、集合A
23の位置には0が設定される。
【0026】
また、
図3において横方向の関係性は、関係x
11とx
12とが存在するので、横方向の関係性を示す行列は、
図4の(b)に示すように、関係x
11とx
12との位置に1が設定され、その他のx
21とx
22の位置には0が設定される。なお、横方向の関係性の行列において、0は関係性なし、1は右方向への関係性あり、2は左方向への関係性あり、3は積集合の関係性あり、4は同一の集合を示す。
【0027】
また、
図3において縦方向の関係性は、関係y
11が存在するので、縦方向の関係性を示す行列は、
図4の(b)に示すように、関係y
11の位置に1が設定され、その他のy
12とy
13の位置には0が設定される。なお、縦方向の関係性の行列において、0は関係性なし、1は下方向への関係性あり、2は上方向への関係性あり、3は積集合の関係性あり、4は同一の集合を示す。
【0028】
また、
図3において交点(斜め)方向の関係性は、関係z
11が存在するので、交点方向の関係性を示す行列は、
図4の(b)に示すように、関係z
11の位置に1が設定され、その他のz
12の位置には0が設定される。なお、交点方向の関係性の行列において、0は関係性なし、1は右上方向への関係性あり、2は右下方向への関係性あり、3は左下方向への関係性あり、4は左上方向への関係性あり、5は右上方向と左下方向の積集合の関係性あり、6は左上方向と右下方向の積集合の関係性あり、7は同一の集合を示す。
【0029】
このような表記を前提として、各処理部を説明する。
図1に戻り、検出部21は、ノードの集合とノード間の関係性とを検出する処理部である。具体的には、検出部21は、ノードデータDB13等を参照し、各ノードが有する属性を特定し、同じ属性を有するノードの集合を生成する。このとき、1つのノードに複数の属性が設定されている場合、当該ノードは複数の集合に属することもある。
【0030】
そして、検出部21は、対象の集合に入力する(INする)集合や対象の集合に入力される(OUTする)集合など、属性間の関係性にしたがって、有向性の関係がある集合間を検出する。ここで、有向性の関係性を判定する閾値(R値)は、様々な手法で決定することができる。例えば、対象とする集合のINとOUTを別に考える手法、対象とする集合のINの数とINしてくる元の集合のOUTの数から算出する手法、対象とする集合のOUTの数とOUT先の集合のINの数から算出する手法などがある。また、例えばノード数が50:50の場合と1:99の場合には後者のRのほうが高くなるように算出する手法、集合内のノード数に対するエッジ数の比率など、集合間のノード数によって変動させることもでき、全体のノード数とエッジ数の比率によってRを変動させることもできる。また、100以下の任意の値を設定することもできる。
【0031】
また、検出部21は、有向性がある集合間において、集合があれば結合し、集合内のノードの一部が一致していれば積集合を生成し、部分集合があればまとめた集合とする。そして、検出部21は、生成した集合や関係性を、集合データDB14等に格納する。
【0032】
探索部22は、集合の配置の組み合わせを探索する処理部である。具体的には、探索部22は、検出部21によって検出されたノードの集合に関する情報を集合データDB14等から取得し、集合の配置の組み合わせを探索し、その結果を記憶部12等に格納する。なお、詳細は、
図8と
図9を用いて後述する。
【0033】
拡張探索部23は、集合の配置範囲を拡張した、集合の組み合わせを探索する処理部である。具体的には、探索部22よって探索された集合の配置の組み合わせを記憶部12等から取得し、集合の行列が0である位置に他の集合を配置した仮定を生成し、その仮定が成り立つか否かを判定することで、集合の配置範囲を拡大して探索する。そして、拡張探索部23は、その結果を記憶部12等に格納する。なお、詳細は、
図10から
図12を用いて後述する。
【0034】
配置部24は、ノードの配置を実行する処理部である。具体的には、配置部24は、拡張探索部23による探索結果を記憶部12等から取得し、様々なノードの配置パターンを生成し、力学的に最も安定している配置パターンを特定する。例えば、配置部24は、特定の属性を有するノードを、特定した描画範囲に配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させるスプリングアルゴリズムで配置する。さらに、配置部24は、特定された属性を有しないノードを、特定した描画範囲外に配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させるスプリングアルゴリズムで配置する。そして、配置部24は、その結果を記憶部12等に格納する。なお、詳細は、
図13から
図17を用いて後述する。
【0035】
[処理の流れ]
ここでは、上述した各処理部が実行する処理について、図面を用いて、処理の流れと具体的な例を詳細に説明する。
【0036】
(全体的な流れ)
図5は、全体的な処理の流れを示すフローチャートである。
図5に示すように、検出部21は、ノードの集合と関係性を抽出し(S101)、探索部22は、集合の配置の組み合わせを探索する(S102)。続いて、拡張探索部23は、集合の配置範囲拡張の組み合わせを探索し(S103)、配置部24は、ノードを配置する(S104)。
【0037】
(ノードの集合と関係性の検出)
図6は、ノードの集合と関係性の検出処理の流れを示すフローチャートであり、
図7は、ノードの集合と関係性の検出処理を説明する図である。
【0038】
検出部21は、同じ属性を有するノードの集合Qiの集合Pを生成する(S201)。例えば、検出部21は、集合Qi・・・Qmを生成する(mは自然数)。
【0039】
続いて、検出部21は、集合間にR%の有向性の関係があるものを検出する(S202)。例えば、
図7の(a)に示すように、検出部21は、集合が有する属性間の関係等に基づき、集合Q
1から集合Q
2への関係、集合Q
2から集合Q
4への関係、集合Q
8から集合Q
7への関係、集合Q
9から集合Q
4への関係を抽出する。
【0040】
そして、検出部21は、有向性が検出された集合の中に同じ集合があれば結合する(S203)。例えば、
図7の(b)に示すように、検出部21は、有向性が検出された集合群の中に、集合Q
2と集合Q
4とが複数回登場することから、これらをまとめることで、集合Q
1-Q
2-Q
4の関係性と、集合Q
9-集合Q
4の関係性とを検出する。
【0041】
続いて、検出部21は、検出された各集合において、ノードの一部が一致している集合があれば積集合として格納する(S204)。例えば、
図7の(b)と(c)に示すように、検出部21は、集合Q
1にはノードxとノードyが含まれ、集合Q
2にはノードyとノードzが含まれることから、ノードyが共通するので、ノードyを含む積集合Q
kを生成する。
【0042】
その後、検出部21は、生成された集合群の中に、部分集合があればそれらをまとめた集合として格納する(S205)。例えば、検出部21は、集合Q9には集合Q1とQ2が含まれる場合、これらをまとめて集合Q9とする。
【0043】
(集合の配置の組み合わせ探索)
図8は、集合の配置の組み合わせの探索処理の流れを示すフローチャートであり、
図9は、集合の配置の組み合わせの探索を説明する図である。
【0044】
図8に示すように、探索部22は、
図6で生成された集合群Sから起点となる集合Tを任意に選択する(S301)。続いて、探索部22は、選択した集合Tに部分集合が含まれない場合(S302:No)、集合Tと有向性で結ばれた集合Uを集合Tの隣に配置する(S303)。一方、探索部22は、選択した集合Tに部分集合が含まれる場合(S302:Yes)、集合Tの部分集合と有向性で結ばれた集合Uを集合Tの隣に配置する(S304)。なお、集合Uが複数存在する場合は、任意の集合を1つ選択する。
【0045】
そして、探索部22は、有向性で結ばれた他の集合が存在するか否かを判定し(S305)、該当する他の集合が存在しない場合(S305:No)、すべての組み合わせが探索済みか否かを判定する(S306)。
【0046】
ここで、未探索の組み合わせが存在する場合(S306:No)、探索部22は、S305以降を繰り返す。一方、探索部22は、すべての組み合わせが探索済みである場合(S306:Yes)、探索された組み合わせを配列V(変数V)に格納し(S307)、集合の行列を変換することで重複するものを、1つ残して配列Vから除外する(S308)。
【0047】
また、S305において、探索部22は、有向性で結ばれた他の集合が存在する場合(S305:Yes)、有向性で結ばれた部分集合が存在するか否かを判定する(S309)。
【0048】
そして、探索部22は、有向性で結ばれた部分集合が存在する場合(S309:Yes)、部分集合と有向性で結ばれた集合を選択する(S310)。なお、有向性で結ばれた部分集合が存在しない場合(S309:No)、S310を実行することなく、S311が実行される。
【0049】
その後、探索部22は、部分集合が配置できるか否かを判定し(S311)、配置できない場合(S311:No)、この配置の可能性がないとして破棄し(S312)、配置できる場合(S311:Yes)、有向性で結ばれた集合の隣に部分集合を配置する(S313)。
【0050】
(具体例)
図9を用いて具体例を説明する。
図9では、集合A、集合B、集合C、集合D、集合Eを含む集合群Sにおいて、集合Aと集合Bとの間に関係性があり、集合Bと集合Cとの間に関係性があり、集合Dと集合Eとの間に関係性があるとする。また、集合Aと集合Bの共通部分は空集合であり、集合Bと集合Cの共通部分は空集合であり、集合Dと集合Eの共通部分は集合Fであるとする。
【0051】
まず、探索部22は、集合Aを選択すると、集合Aと有向性で結ばれた集合Bを集合Aの隣に配置し、
図9の(1)に示す[集合A,集合B]の行列を生成する。この行列では、集合Aから集合Bへの右方向に関係性があることから、横方向の関係性を示す行列に[1]が設定される。
【0052】
次に、探索部22は、集合Bと有向性で結ばれた集合Cが存在することから、集合Cの配置を検討する。具体的には、探索部22は、集合Bの隣に配置することで、
図9の(2)に示す[集合A,集合B,集合B]の行列を生成する。この行列では、集合Aから集合Bへの右方向および集合Bから集合Cへの右方向に関係性があることから、横方向の関係性を示す行列に[1,1]が設定される。
【0053】
別配置として、探索部22は、集合Cを集合Bの右下に配置する配置を探索し、集合がない位置に0を設定することで、
図9の(3)に示す2行3列の行列を生成する。この行列では、集合Aから集合Bへの右方向の行列に[1]、いずれの関係性もない縦方向の行列に[0]、集合Bから集合Cに該当する左上から右下への交点方向の行列に[2]が設定された各行列が生成される。
【0054】
別配置として、探索部22は、集合Bの下に集合Cを配置する配置を探索し、集合がない位置に0を設定することで、
図9の(4)に示す2行2列の行列を生成する。この行列では、集合Aから集合Bへの右方向の行列に[1]、集合Bから集合Cへの下方向に行列[1]、いずれの関係性もない交点方向の行列に[0]が設定された各行列が生成される。
【0055】
別配置として、探索部22は、集合Aの下に集合Cを配置する配置を探索し、集合がない位置に0を設定することで、
図9の(5)に示す2行2列の行列を生成する。この行列では、集合Aから集合Bへの右方向の行列に[1]、集合Aから集合Cへの下方向に行列[1]、集合Bから集合Cに該当する右上から左下への交点方向の行列に[3]が設定された各行列が生成される。
【0056】
このようにして、探索部22は、集合A、集合B、集合Cの配置として、上記(1)から(5)の5パターンを探索することができる。なお、探索部22は、(3)のパターンについては、(2)のパターンと(4)のパターンで代用可能なことから、対象外と判定して削除する。
【0057】
同様に、探索部22は、集合Dと集合Eについても、集合Dと有向性で結ばれた集合Eを集合Aの隣に配置し、
図9の(6)に示す[集合D,集合E]の行列を生成する。この行列では、集合と集合Eが積集合の関係性があることから、横方向の関係性を示す行列に[3]が設定される。
【0058】
(集合の配置範囲拡張の組み合わせを探索)
図10は、集合の配置範囲を拡張した組み合わせの探索処理の流れを示すフローチャートであり、
図11は、集合の配置範囲の拡張探索を説明する図であり、
図12は、集合の配置範囲の拡張探索結果を説明する図である。
【0059】
図10に示すように、拡張探索部23は、配列V(変数V)に未処理の組み合わせが残っている場合(S401:Yes)、配列Vから一つの組み合わせWを取り出して、配列X(変数X)に格納する(S402)。
【0060】
続いて、拡張探索部23は、組み合わせWの集合の行列に未調査の0がある場合(S403:Yes)、0と周囲の行列Aijの間にある関係性が0か否かを判定する(S404)。
【0061】
ここで、拡張探索部23は、0と周囲の配列Aijの間にある関係性が0である場合(S404:Yes)、集合の行列の0の位置に行列Aijの集合をコピーしたものを配列Xに格納する(S405)。その後、拡張探索部23は、0の周りに未調査の集合が残っている場合には(S406:Yes)、S404以降を繰り返す。
【0062】
なお、拡張探索部23は、S404において、0と周囲の配列Aijの間にある関係性が0ではない場合(S404:No)、S405を実行することなく、S406を実行する。また、拡張探索部23は、S406において、0の周りに未調査の集合が残っていない場合には(S406:No)、S403以降を繰り返す。
【0063】
また、拡張探索部23は、S401において、配列Vに未処理の組み合わせが残っていない場合(S401:No)、集合の行列を変換することで重複するものを1つ残して配列Xから除外する(S407)。
【0064】
(具体例)
図11と
図12を用いて具体例を説明する。まず、
図11を用いて、上述した
図9の配置パターン(5)を例にして説明する。
図11に示すように、拡張探索部23は、
図9の配置パターン(5)の拡張パターンとして、集合Bの下の「0」に、当該「0」の周囲の集合をコピーすることで、3つの拡張パターンを探索する。
【0065】
具体的には、拡張探索部23は、集合Bを上下に配置した拡張パターン(a)と、集合Bの下に集合Cを配置した拡張パターン(b)と、集合Bの下に集合Aを配置した拡張パターン(c)とを探索する。ここで、拡張探索部23は、拡張パターン(c)については、集合Bから集合Cへの関係性が存在することから、左上の集合Aと拡張した右下の集合Aとを結合することができないので、拡張できないと決定する。この結果、拡張探索部23は、
図9の配置パターン(5)の拡張パターンとして、拡張パターン(a)と拡張パターン(b)の2つを探索する。
【0066】
このような拡張探索の結果を
図12に示す。
図12は、
図9に示した配置パターン(2)、(4)、(5)、(6)の拡張パターンの探索結果である。なお、配置パターン(1)は、未配置の集合があることから除外される。
【0067】
具体的には、配置パターン(2)について、値が「0」の位置に、隣接する集合Aを配置した拡張パターン(2)、隣接する集合Cを配置した拡張パターン(3)、隣接する集合Bを配置した拡張パターン(4)および(5)が探索される。ここで、拡張パターン(4)は、集合Aと集合Cの間に関係性がないことから、
図11のパターン(c)とは異なり、関係性を跨ぐ配置にならないので、採用される。
【0068】
拡張配置パターン(2)は、集合Aを縦方向に並べた行列となるので、縦方向の関係性の行列に同一を示す[4]が設定される。拡張配置パターン(3)は、集合Cを横方向に並べた行列となるので、横方向の関係性の行列に同一を示す[4]が設定される。拡張配置パターン(4)は、集合Bを交点方向に並べた行列となるので、交点方向の関係性の行列に同一を示す[7]が設定される。拡張配置パターン(5)は、集合Bを縦方向に並べた行列となるので、縦方向の関係性の行列に同一を示す[4]が設定される。
【0069】
(ノードの配置)
図13は、ノードの配置処理の流れを示すフローチャートであり、
図14と
図15は、ノードの配置の具体例1を説明する図であり、
図16と
図17は、ノードの配置の具体例2を説明する図である。
【0070】
図13に示すように、配置部24は、
図10の拡張探索処理のS402で格納された配列Xに未処理の組み合わせが残っている場合(S501:Yes)、描画範囲内のランダムな位置に、集合の配列通りにノードの描画範囲を生成する(S502)。
【0071】
続いて、配置部24は、集合の範囲内にノードをランダムに配置する(S503)。そして、配置部24は、集合の関係性がある範囲でのみ影響しあうように、スプリングアルゴリズムでノードを配置し(S504)、集合の範囲とノードの相対位置を固定する(S505)。その後、配置部24は、現在表示されているノードのうち、集合の関係性がないノード間の関係を探索して描画する(S506)。
【0072】
そして、配置部24は、集合の関係性で結ばれた描画領域を一つのノードとみなし、新たに描画されたノードを加えてスプリングアルゴリズムで描画する(S507)。例えば、配置部24は、直接関係がある場合は直線で結ぶ。また、配置部24は、集合の範囲内に入らないように、複数ノードがある場合は等分して関係が近い順に並べる。
【0073】
その後、配置部24は、ノードの相対位置を解除し(S508)、スプリングアルゴリズムで再描画する(S509)。ただし、集合に属するノードは、その範囲から出ることはなく、属さないノードはその範囲に入ることはない。そして、配置部24は、集合の範囲とノードの相対位置を固定し(S510)、S501以降を繰り返す。
【0074】
また、S501において、配置部24は、
図10の拡張探索処理のS402で格納された配列Xに未処理の組み合わせが残っていない場合(S501:No)、各組み合わせについて、安定している配置を求めて採用する(S511)。例えば、配置部24は、集合の範囲の中心とその集合に属するノードの距離の2乗の平均が最も小さい配置や、ノード間の距離の標準偏差が最も小さい配置などを採用する。
【0075】
その後、配置部24は、まだ配置されていないノードを、関係するエッジがつながっているノードの近くに配置し(S512)、追加されたノードをスプリングアルゴリズムで配置する(S513)。
【0076】
(具体例)
例えば、配置部24は、集合の配置の組み合わせのうち一つとして、
図14の(1)に示すように、[集合A、集合B、集合C]と[集合D、集合E]をランダムに配置する。続いて、
図14の(2)に示すように、配置部24は、各集合内にノードを配置し、スプリングアルゴリズムで描画する。
【0077】
そして、配置部24は、
図14の(3)に示すように、集合内のノードを配置した後、集合に含まれないノードのうち別の関係性間を有するノードを、集合外に配置して連結する。その後、配置部24は、
図14の(4)に示すように、関係性で結ばれた集合を1つのノードとして扱った上で、スプリングアルゴリズムで描画する。
【0078】
その後、配置部24は、
図15に示すように、配置された集合に含まれない未配置のノードを配置し、スプリングアルゴリズムで描画する。このとき、配置部24は、スプリングアルゴリズムで描画する際は、新たに配置した(追加した)ノードのみを動かして配置を行う。
【0079】
同様に、配置部24は、集合の配置の組み合わせのうち一つとして、
図16の(1)に示すように、[集合A、集合B、集合C]と[集合D、集合E]をランダムに配置する。この具体例2は、具体例1とは異なり、集合Bが拡張探索により配置されたパターンである。続いて、
図16の(2)に示すように、配置部24は、各集合内にノードを配置し、スプリングアルゴリズムで描画する。
【0080】
そして、配置部24は、
図16の(3)に示すように、集合内のノードを配置した後、集合に含まれないノードのうち別の関係性間を有するノードを、集合外に配置して連結する。その後、配置部24は、
図16の(4)に示すように、関係性で結ばれた集合を1つのノードとして扱った上で、スプリングアルゴリズムで描画する。
【0081】
その後、配置部24は、
図17に示すように、配置された集合に含まれない未配置のノードを配置し、スプリングアルゴリズムで描画する。このとき、配置部24は、スプリングアルゴリズムで描画する際は、新たに配置した(追加した)ノードのみを動かして配置を行う。
【0082】
このようにして、配置部24は、各集合の配置の組み合わせについて、
図13の処理を実行して、各構造を描画する。そして、配置部24は、最も安定している配置の組み合わせを選択し、配置結果DB16に格納する。
【0083】
[効果]
上述したように、描画装置10は、ノードの属性ごとに集合を生成し、有向性の関係性をもとに集合間の位置の組み合わせを探索する。そして、描画装置10は、探索した位置関係を保持したまま、集合に属するノードを描画した後、残りのノードを描画する。その後、描画装置10は、描画した配置をもとに、最も安定している配置を採用する。したがって、描画装置10は、視覚的に理解しやすいグラフを描画することができる。
【0084】
図18は、グラフ描画結果を説明する図である。
図18では、属性が「対策」である集合(対策)、属性が「病名」である集合(病名)、属性が「症状」である集合(症状)と各ノードを描画した例である。
図2の(a)に示すような一般的なスプリングアルゴリズムでは、属性である病名や対策がバラバラに配置されてしまい、1つの症状(ノード)がどの病名でどの対策と関係しているのかを直感的に把握することが難しい。一方、
図18に示すように、描画装置10を用いて描画されたグラフは、関係性が一定方向に定まっていることから、属性ごとの関係性が明確であり、各属性に属するノードも明確である。したがって、1つの症状(ノード)がどの病名でどの対策と関係しているのかを直感的にも視覚的にも把握することが容易である。
【実施例2】
【0085】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【0086】
[関係性の判定]
例えば、属性間やノード間の有向性の有無を判定する手法は、公知の様々な手法を採用することができる。また、属性の一例としては、上述した例以外にも、クラス、データ値、データタイプなどを用いることができる。また、集合を生成して配置する例を説明したが、ノードの数が少ない場合などは、ノードの属性を上述した処理に適用して配置処理を実行することもできる。なお、拡張探索処理は、省略することもできる。
【0087】
[数値等]
また、上記実施例で用いたノードの数、集合の数、閾値、行列の値、属性名、属性数等は、あくまで一例であり、任意に変更することができる。また、拡張処理は、省略することもでき、拡張処理を行わずに、ノード配置を行うことで、グラフを描画することもできる。また、各処理において、途中経過などを一時的に保存する先として、配列などを用いた例を説明したが、これに限定されるものではなく、プログラム等で利用される変数や一時領域などを用いることもできる。
【0088】
[システム]
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【0089】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【0090】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【0091】
[ハードウェア]
図19は、ハードウェア構成例を説明する図である。
図19に示すように、描画装置10は、通信装置10a、HDD(Hard Disk Drive)10b、メモリ10c、プロセッサ10dを有する。また、
図19に示した各部は、バス等で相互に接続される。
【0092】
通信装置10aは、ネットワークインタフェースカードなどであり、他のサーバとの通信を行う。HDD10bは、
図1に示した機能を動作させるプログラムやDBを記憶する。
【0093】
プロセッサ10dは、
図1に示した各処理部と同様の処理を実行するプログラムをHDD10b等から読み出してメモリ10cに展開することで、
図1等で説明した各機能を実行するプロセスを動作させる。例えば、このプロセスは、描画装置10が有する各処理部と同様の機能を実行する。具体的には、プロセッサ10dは、検出部21、探索部22、拡張探索部23、配置検討部24等と同様の機能を有するプログラムをHDD10b等から読み出す。そして、プロセッサ10dは、検出部21、探索部22、拡張探索部23、配置検討部24等と同様の処理を実行するプロセスを実行する。
【0094】
このように、描画装置10は、プログラムを読み出して実行することで描画方法を実行する情報処理装置として動作する。また、描画装置10は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、描画装置10によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【0095】
10 描画装置
11 通信部
12 記憶部
13 ノードデータDB
14 集合データDB
15 エッジ情報DB
16 配置結果DB
20 制御部
21 検出部
22 探索部
23 拡張探索部
24 配置部