(57)【要約】【課題】視覚的に理解しやすいグラフを描画することを課題とする。【解決手段】描画装置は、データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定する。描画装置は、特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、特定した描画範囲に各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、データ構造の各ノードを配置したグラフデータを生成する。【選択図】図１８
2020194459.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータが、
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定し、
特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
特定した描画範囲に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
前記データ構造の各ノードを配置したグラフデータを生成する
処理を実行することを特徴とする描画方法。
【請求項２】
前記複数のノードそれぞれに付与される属性に基づき、同じ属性を有するノードを集約させた複数の集合を生成し、
前記複数の集合間の関係性に基づき、前記複数の集合それぞれを配置し、各集合内に属するノードである各所属ノードを、スプリングアルゴリズムによって配置し、
各集合内に属するノードを配置した後、いずれの集合内にも属さないノードである各無所属ノードを、前記スプリングアルゴリズムによって配置して、前記グラフデータを生成する、処理を前記コンピュータが実行することを特徴とする請求項１に記載の描画方法。
【請求項３】
前記配置する処理は、前記複数の集合間の関係性に基づき、複数の配置パターンを生成し、前記複数の配置パターンそれぞれについて、前記各所属ノードを配置し、
前記生成する処理は、前記各所属ノードが配置された前記複数の配置パターンそれぞれについて前記各無所属ノードを配置し、前記各所属ノードおよび前記各無所属ノードが配置された前記複数の配置パターンそれぞれのうち、前記各集合の範囲の中心と前記各集合に属するノードの距離の２乗の平均が最も小さい配置パターン、または、ノード間の距離の標準偏差が最も小さい配置パターンを、前記グラフデータに選択することを特徴とする請求項２に記載の描画方法。
【請求項４】
前記複数の配置パターンそれぞれについて、集合が存在しない位置に、当該位置の周辺に位置する近接集合を配置した複数の拡張配置パターンを生成する処理を、前記コンピュータが実行し、
前記配置する処理は、前記複数の拡張配置パターンそれぞれについて、前記各所属ノードを配置し、
前記生成する処理は、前記各所属ノードが配置された前記複数の拡張配置パターンそれぞれについて前記各無所属ノードを配置し、前記各所属ノードおよび前記各無所属ノードが配置された前記複数の拡張配置パターンそれぞれから、前記グラフデータに選択することを特徴とする請求項３に記載の描画方法。
【請求項５】
コンピュータに、
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定し、
特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
特定した描画範囲に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、
前記データ構造の各ノードを配置したグラフデータを生成する
処理を実行させることを特徴とする描画プログラム。
【請求項６】
データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定する特定部と、
選特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させ、特定した描画範囲に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させて、前記データ構造の各ノードを配置したグラフデータを生成する配置部と
を有することを特徴とする描画装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、描画方法、描画プログラムおよび描画装置に関する。
【背景技術】
【０００２】
ソフトウェアの構成やデータの構成などを描画するグラフ描画アルゴリズムを利用した力学モデルが利用されている。近年では、ノードとノードを接続するエッジとから成るグラフデータであって、ノード間には斥力を発生させ、エッジには引力を発生させることで、関係のあるノードは近く、関係の薄いノードは遠くに配置するスプリングアルゴリズムが知られている。また、親と子の関係を有するツリー上に記述する階層型データモデルや、グラフの一部を一つのまとまりとしてとらえ、さらにその上位でそれらのまとまりの一部を一つのまとまりとしてとらえることを繰り返すことで、グラフ全体の構造を示す階層型グラフ描画などが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平８−０３０７９９号公報
【特許文献２】特開平１１−１４４０７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、上記技術では、視覚的に理解しやすいグラフを描画することが難しい。具体的には、力学モデルで描画すると、全体にバランスよく配置されるが、属性間の関係は視覚的にわかりにくい。
【０００５】
例えば、スプリングアルゴリズムでは、同じ属性のノードが散らばってしまうため、人が特徴を見分けにくく、描画のたびにノードの場所が大きく変わってしまう。階層型データモデルでは、親と子が１対多の関係しか許容されていないので、汎用性が低く、階層型グラフ描画では、構造は見やすくなるが、属性を意識していないので、属性間の関係性を描画できない。
【０００６】
一つの側面では、視覚的に理解しやすいグラフを描画することができる描画方法、描画プログラムおよび描画装置を提供することを目的とする。
【課題を解決するための手段】
【０００７】
第１の案では、描画方法は、コンピュータが、データ構造が有する複数のノードそれぞれに付与される属性ごとに描画範囲を特定する処理を実行する。描画方法は、コンピュータが、特定した描画範囲に各属性を有するノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させる処理を実行する。描画方法は、コンピュータが、特定した描画範囲に前記各属性を有しないノードを配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させる処理を実行する。描画方法は、コンピュータが、前記データ構造の各ノードを配置したグラフデータを生成する処理を実行する。
【発明の効果】
【０００８】
一実施形態によれば、視覚的に理解しやすいグラフを描画することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１にかかる描画装置の機能構成を示す機能ブロック図である。
【図２】図２は、実施例１にかかるグラフ描画を説明する図である。
【図３】図３は、グラフ表記のルールを説明する図である。
【図４】図４は、グラフ表記のルールを説明する図である。
【図５】図５は、全体的な処理の流れを示すフローチャートである。
【図６】図６は、ノードの集合と関係性の検出処理の流れを示すフローチャートである。
【図７】図７は、ノードの集合と関係性の検出処理を説明する図である。
【図８】図８は、集合の配置の組み合わせの探索処理の流れを示すフローチャートである。
【図９】図９は、集合の配置の組み合わせの探索処理を説明する図である。
【図１０】図１０は、集合の配置範囲を拡張した組み合わせの探索処理の流れを示すフローチャートである。
【図１１】図１１は、集合の配置範囲の拡張探索を説明する図である。
【図１２】図１２は、集合の配置範囲の拡張探索結果を説明する図である。
【図１３】図１３は、ノードの配置処理の流れを示すフローチャートである。
【図１４】図１４は、ノードの配置の具体例１を説明する図である。
【図１５】図１５は、ノードの配置の具体例１を説明する図である。
【図１６】図１６は、ノードの配置の具体例２を説明する図である。
【図１７】図１７は、ノードの配置の具体例２を説明する図である。
【図１８】図１８は、グラフ描画結果を説明する図である。
【図１９】図１９は、ハードウェア構成例を説明する図である。
【発明を実施するための形態】
【００１０】
以下に、本願の開示する描画方法、描画プログラムおよび描画装置の実施例を図面に基づいて詳細に説明する。なお、この実施例によりこの発明が限定されるものではない。また、各実施例は、矛盾のない範囲内で適宜組み合わせることができる。
【実施例１】
【００１１】
［描画装置の機能構成］
図１は、実施例１にかかる描画装置１０の機能構成を示す機能ブロック図である。図１に示す描画装置１０は、ソフトウェアの構成、データの構成、ネットワークの構成、属性間の関係性などの各種データ構造を描画するグラフ描画装置の一例であり、例えばサーバ装置などである。この描画装置は、ノードの集合と、ノード間の関係を示すエッジの集合で表されるデータ構造を、一定の範囲内に、人間が見やすく自動配置する。
【００１２】
ここで、描画装置１０のグラフ描画について説明する。図２は、実施例１にかかるグラフ描画を説明する図である。図２は、属性を四角または楕円で示し、ノードを円で示す。図２の（ａ）に示すように、一般的な力学モデルを用いてデータ構造を描画すると、全体的にバランスよく配置されるが、属性間の関係は視覚的にわかりにくい。つまり、属性とノードとのつながりはわかりやすく、どの属性がどのノードを有するかは、視覚的に認識しやすい。しかし、属性間では、つながりがあるかないかはわかるものの、そのつながりがどのような関係性を有するのかまでを視覚的に認識することが難しい。
【００１３】
また、図２の（ｂ）に示すように、属性ごとにまとめようとすると、ノードが複数の属性を有することがあるので、すべてのノードがまとまってしまう可能性がある。例えば、図２の（ｂ）では、属性として「性別」、「職業」、「趣味」、「住所」を有する各ノードについて、それぞれのノードがいずれか１つの属性で共通しているので、同じ属性を近づけようとすると、４つのノードが１つの場所にまとまってしまい、関係性を把握することができない。
【００１４】
また、図２の（ｃ）に示すように、スプリングアルゴリズムなどを用いて、属性に引力をつけてまとめようとすると、引力が強いと図のように団子になってしまい、弱いとノードの反発力のほうが強くなってしまい、ノードが集合しない。また、ノード間の関係がないにも関わらず、同じ属性のノード同士がくっついてしまうので、関係があるように見えてしまることがある。また、複数属性を持っているノードもあるので、関係ないノードも集合の一部として見えてしまうことがある。
【００１５】
そこで、実施例１にかかる描画装置１０は、ノードの属性ごとに集合を生成し、集合間に閾値（Ｒ％）の有向性の関係がある場合、その関係を記録する。そして、描画装置１０は、求めた関係性をもとに集合間の位置の組み合わせを求め、求めた位置関係を保持したまま、集合に属するノードを描画する。その後、描画装置１０は、残りのノードを描画した後、描画した配置をもとに、最も安定している配置を採用する。このようにすることで、図２の（ｄ）に示すように、描画装置１０は、意味的に関係のある属性のノードを優先して描画することで、ユーザに直感的に理解しやすくさせることができる。
【００１６】
図１に戻り、描画装置１０は、通信部１１、記憶部１２、制御部２０を有する。通信部１１は、他の装置の間の通信を制御する処理部であり、例えば通信インタフェースなどである。例えば、通信部１１は、描画対象のデータを管理端末から受信し、描画結果を管理端末に送信する。
【００１７】
記憶部１２は、データや制御部２０が実行するプログラムを記憶する記憶装置の一例であり、例えばメモリやハードディスクなどである。例えば、記憶部１２は、ノードデータＤＢ１３、集合データＤＢ１４、エッジ情報ＤＢ１５、配置結果ＤＢ１６を有する。また、記憶部１２は、描画対象のデータの構造などを含む情報を記憶する。
【００１８】
ノードデータＤＢ１３は、描画対象のデータ構造におけるノードに関する情報を記憶するデータベースである。具体的には、ノードデータＤＢ１３は、ノードごとに、各ノードに設定される属性を記憶する。例えば、ノードデータＤＢ１３は、「ノード、属性」として「ノードＡ、属性（性別：男性、職業：会社員）」などを記憶する。また、ノードデータＤＢ１３は、制御部２０によって生成されたグラフ構造のノードに関する情報として、接続されるノードに発生させる斥力などを記憶する。
【００１９】
集合データＤＢ１４は、ノードの集合に関する情報を記憶するデータベースである。例えば、集合データＤＢ１４は、制御部２０によって生成された集合ごとに、当該集合に属するノードや集合の属性などを記憶する。
【００２０】
エッジ情報ＤＢ１５は、エッジに関する情報を記憶するデータベースである。例えば、集合データＤＢ１４は、制御部２０によって生成されたグラフ構造のエッジに関する情報として、接続されるノード、エッジに発生させる引力などを記憶する。
【００２１】
配置結果ＤＢ１６は、グラフ構造の配置結果を記憶するデータベースである。例えば、配置結果ＤＢ１６は、制御部２０によって生成されたグラフ構造に関する情報として、ノード、ノードの集合、ノード間のエッジ、集合間のエッジなどの関する情報を記憶する。
【００２２】
制御部２０は、描画装置１０全体を司る処理部であり、例えばプロセッサなどである。この制御部２０は、検出部２１、探索部２２、拡張探索部２３、配置部２４を有する。なお、検出部２１、探索部２２、拡張探索部２３、配置部２４は、プロセッサが有する電子回路やプロセッサが実行するプロセスの一例などである。
【００２３】
ここで、本実施例で使用するグラフ表記について説明する。図３と図４は、グラフ表記のルールを説明する図である。図３に示すように、一例として、集合Ａ１１、Ａ１２、Ａ１３、Ａ２１、Ａ２２を有し、集合Ａ１１と集合Ａ１２との間は関係ｘ１１を有し、集合Ａ１２と集合Ａ１３との間は関係ｘ１２を有し、集合Ａ１１と集合Ａ２１との間は関係ｙ１１を有し、集合Ａ１３と集合Ａ２２との間は関係ｚ２２を有するとする。また、集合Ａ１１には、ノードｎ２、ｎ３、ｎ４が含まれ、集合Ａ１２には、ノードｎ５、ｎ６が含まれ、集合Ａ１３には、ノードｎ７、ｎ８が含まれ、集合Ａ２１には、ノードｎ１が含まれ、集合Ａ２２には、ノードｎ９が含まれるとする。なお、見やすくするなどの便宜上、各領域を同じ大きさの長方形にしているが、形、大きさともに同じである必要はない。
【００２４】
このようなグラフ構造において、集合の行列を図４の（ａ）のように表記し、関係性の行列を図４の（ｂ）のように表記するものとする。ここで、Ａｉｊは、ｉ行ｊ列に属するノードの集合である。ｘｉｊは、ｉ行ｊ列の集合とｉ行（ｊ＋１）列の集合との関係であり、ｙｉｊは、ｉ行ｊ列の集合と（ｉ＋１）行ｊ列の集合との関係である。ｚｉｊは、ｉ行ｊ列の集合と（ｉ＋１）行（ｊ＋１）列の集合との関係、もしくは、ｉ行（ｊ＋１）列の集合と（ｉ＋１）行ｊ列の集合との関係である。なお、集合の配置の段階でクロスの関係性は許容しないこととする。
【００２５】
また、集合の行列において、ノードが存在する場所には１が設定され、ノードがない場所には０が設定される。具体的には、図３においては集合Ａ１１、Ａ１２、Ａ１３、Ａ２１、Ａ２２が存在し、集合Ａ２３が存在しないことから、図４の（ａ）に示す集合の行列においては、集合Ａ１１、Ａ１２、Ａ１３、Ａ２１、Ａ２２のそれぞれの位置には１が設定され、集合Ａ２３の位置には０が設定される。
【００２６】
また、図３において横方向の関係性は、関係ｘ１１とｘ１２とが存在するので、横方向の関係性を示す行列は、図４の（ｂ）に示すように、関係ｘ１１とｘ１２との位置に１が設定され、その他のｘ２１とｘ２２の位置には０が設定される。なお、横方向の関係性の行列において、０は関係性なし、１は右方向への関係性あり、２は左方向への関係性あり、３は積集合の関係性あり、４は同一の集合を示す。
【００２７】
また、図３において縦方向の関係性は、関係ｙ１１が存在するので、縦方向の関係性を示す行列は、図４の（ｂ）に示すように、関係ｙ１１の位置に１が設定され、その他のｙ１２とｙ１３の位置には０が設定される。なお、縦方向の関係性の行列において、０は関係性なし、１は下方向への関係性あり、２は上方向への関係性あり、３は積集合の関係性あり、４は同一の集合を示す。
【００２８】
また、図３において交点（斜め）方向の関係性は、関係ｚ１１が存在するので、交点方向の関係性を示す行列は、図４の（ｂ）に示すように、関係ｚ１１の位置に１が設定され、その他のｚ１２の位置には０が設定される。なお、交点方向の関係性の行列において、０は関係性なし、１は右上方向への関係性あり、２は右下方向への関係性あり、３は左下方向への関係性あり、４は左上方向への関係性あり、５は右上方向と左下方向の積集合の関係性あり、６は左上方向と右下方向の積集合の関係性あり、７は同一の集合を示す。
【００２９】
このような表記を前提として、各処理部を説明する。図１に戻り、検出部２１は、ノードの集合とノード間の関係性とを検出する処理部である。具体的には、検出部２１は、ノードデータＤＢ１３等を参照し、各ノードが有する属性を特定し、同じ属性を有するノードの集合を生成する。このとき、１つのノードに複数の属性が設定されている場合、当該ノードは複数の集合に属することもある。
【００３０】
そして、検出部２１は、対象の集合に入力する（ＩＮする）集合や対象の集合に入力される（ＯＵＴする）集合など、属性間の関係性にしたがって、有向性の関係がある集合間を検出する。ここで、有向性の関係性を判定する閾値（Ｒ値）は、様々な手法で決定することができる。例えば、対象とする集合のＩＮとＯＵＴを別に考える手法、対象とする集合のＩＮの数とＩＮしてくる元の集合のＯＵＴの数から算出する手法、対象とする集合のＯＵＴの数とＯＵＴ先の集合のＩＮの数から算出する手法などがある。また、例えばノード数が５０：５０の場合と１：９９の場合には後者のＲのほうが高くなるように算出する手法、集合内のノード数に対するエッジ数の比率など、集合間のノード数によって変動させることもでき、全体のノード数とエッジ数の比率によってＲを変動させることもできる。また、１００以下の任意の値を設定することもできる。
【００３１】
また、検出部２１は、有向性がある集合間において、集合があれば結合し、集合内のノードの一部が一致していれば積集合を生成し、部分集合があればまとめた集合とする。そして、検出部２１は、生成した集合や関係性を、集合データＤＢ１４等に格納する。
【００３２】
探索部２２は、集合の配置の組み合わせを探索する処理部である。具体的には、探索部２２は、検出部２１によって検出されたノードの集合に関する情報を集合データＤＢ１４等から取得し、集合の配置の組み合わせを探索し、その結果を記憶部１２等に格納する。なお、詳細は、図８と図９を用いて後述する。
【００３３】
拡張探索部２３は、集合の配置範囲を拡張した、集合の組み合わせを探索する処理部である。具体的には、探索部２２よって探索された集合の配置の組み合わせを記憶部１２等から取得し、集合の行列が０である位置に他の集合を配置した仮定を生成し、その仮定が成り立つか否かを判定することで、集合の配置範囲を拡大して探索する。そして、拡張探索部２３は、その結果を記憶部１２等に格納する。なお、詳細は、図１０から図１２を用いて後述する。
【００３４】
配置部２４は、ノードの配置を実行する処理部である。具体的には、配置部２４は、拡張探索部２３による探索結果を記憶部１２等から取得し、様々なノードの配置パターンを生成し、力学的に最も安定している配置パターンを特定する。例えば、配置部２４は、特定の属性を有するノードを、特定した描画範囲に配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させるスプリングアルゴリズムで配置する。さらに、配置部２４は、特定された属性を有しないノードを、特定した描画範囲外に配置した状態で、ノード間に斥力を発生させ且つエッジに引力を発生させるスプリングアルゴリズムで配置する。そして、配置部２４は、その結果を記憶部１２等に格納する。なお、詳細は、図１３から図１７を用いて後述する。
【００３５】
［処理の流れ］
ここでは、上述した各処理部が実行する処理について、図面を用いて、処理の流れと具体的な例を詳細に説明する。
【００３６】
（全体的な流れ）
図５は、全体的な処理の流れを示すフローチャートである。図５に示すように、検出部２１は、ノードの集合と関係性を抽出し（Ｓ１０１）、探索部２２は、集合の配置の組み合わせを探索する（Ｓ１０２）。続いて、拡張探索部２３は、集合の配置範囲拡張の組み合わせを探索し（Ｓ１０３）、配置部２４は、ノードを配置する（Ｓ１０４）。
【００３７】
（ノードの集合と関係性の検出）
図６は、ノードの集合と関係性の検出処理の流れを示すフローチャートであり、図７は、ノードの集合と関係性の検出処理を説明する図である。
【００３８】
検出部２１は、同じ属性を有するノードの集合Ｑｉの集合Ｐを生成する（Ｓ２０１）。例えば、検出部２１は、集合Ｑｉ・・・Ｑｍを生成する（ｍは自然数）。
【００３９】
続いて、検出部２１は、集合間にＲ％の有向性の関係があるものを検出する（Ｓ２０２）。例えば、図７の（ａ）に示すように、検出部２１は、集合が有する属性間の関係等に基づき、集合Ｑ１から集合Ｑ２への関係、集合Ｑ２から集合Ｑ４への関係、集合Ｑ８から集合Ｑ７への関係、集合Ｑ９から集合Ｑ４への関係を抽出する。
【００４０】
そして、検出部２１は、有向性が検出された集合の中に同じ集合があれば結合する（Ｓ２０３）。例えば、図７の（ｂ）に示すように、検出部２１は、有向性が検出された集合群の中に、集合Ｑ２と集合Ｑ４とが複数回登場することから、これらをまとめることで、集合Ｑ１−Ｑ２−Ｑ４の関係性と、集合Ｑ９−集合Ｑ４の関係性とを検出する。
【００４１】
続いて、検出部２１は、検出された各集合において、ノードの一部が一致している集合があれば積集合として格納する（Ｓ２０４）。例えば、図７の（ｂ）と（ｃ）に示すように、検出部２１は、集合Ｑ１にはノードｘとノードｙが含まれ、集合Ｑ２にはノードｙとノードｚが含まれることから、ノードｙが共通するので、ノードｙを含む積集合Ｑｋを生成する。
【００４２】
その後、検出部２１は、生成された集合群の中に、部分集合があればそれらをまとめた集合として格納する（Ｓ２０５）。例えば、検出部２１は、集合Ｑ９には集合Ｑ１とＱ２が含まれる場合、これらをまとめて集合Ｑ９とする。
【００４３】
（集合の配置の組み合わせ探索）
図８は、集合の配置の組み合わせの探索処理の流れを示すフローチャートであり、図９は、集合の配置の組み合わせの探索を説明する図である。
【００４４】
図８に示すように、探索部２２は、図６で生成された集合群Ｓから起点となる集合Ｔを任意に選択する（Ｓ３０１）。続いて、探索部２２は、選択した集合Ｔに部分集合が含まれない場合（Ｓ３０２：Ｎｏ）、集合Ｔと有向性で結ばれた集合Ｕを集合Ｔの隣に配置する（Ｓ３０３）。一方、探索部２２は、選択した集合Ｔに部分集合が含まれる場合（Ｓ３０２：Ｙｅｓ）、集合Ｔの部分集合と有向性で結ばれた集合Ｕを集合Ｔの隣に配置する（Ｓ３０４）。なお、集合Ｕが複数存在する場合は、任意の集合を１つ選択する。
【００４５】
そして、探索部２２は、有向性で結ばれた他の集合が存在するか否かを判定し（Ｓ３０５）、該当する他の集合が存在しない場合（Ｓ３０５：Ｎｏ）、すべての組み合わせが探索済みか否かを判定する（Ｓ３０６）。
【００４６】
ここで、未探索の組み合わせが存在する場合（Ｓ３０６：Ｎｏ）、探索部２２は、Ｓ３０５以降を繰り返す。一方、探索部２２は、すべての組み合わせが探索済みである場合（Ｓ３０６：Ｙｅｓ）、探索された組み合わせを配列Ｖ（変数Ｖ）に格納し（Ｓ３０７）、集合の行列を変換することで重複するものを、１つ残して配列Ｖから除外する（Ｓ３０８）。
【００４７】
また、Ｓ３０５において、探索部２２は、有向性で結ばれた他の集合が存在する場合（Ｓ３０５：Ｙｅｓ）、有向性で結ばれた部分集合が存在するか否かを判定する（Ｓ３０９）。
【００４８】
そして、探索部２２は、有向性で結ばれた部分集合が存在する場合（Ｓ３０９：Ｙｅｓ）、部分集合と有向性で結ばれた集合を選択する（Ｓ３１０）。なお、有向性で結ばれた部分集合が存在しない場合（Ｓ３０９：Ｎｏ）、Ｓ３１０を実行することなく、Ｓ３１１が実行される。
【００４９】
その後、探索部２２は、部分集合が配置できるか否かを判定し（Ｓ３１１）、配置できない場合（Ｓ３１１：Ｎｏ）、この配置の可能性がないとして破棄し（Ｓ３１２）、配置できる場合（Ｓ３１１：Ｙｅｓ）、有向性で結ばれた集合の隣に部分集合を配置する（Ｓ３１３）。
【００５０】
（具体例）
図９を用いて具体例を説明する。図９では、集合Ａ、集合Ｂ、集合Ｃ、集合Ｄ、集合Ｅを含む集合群Ｓにおいて、集合Ａと集合Ｂとの間に関係性があり、集合Ｂと集合Ｃとの間に関係性があり、集合Ｄと集合Ｅとの間に関係性があるとする。また、集合Ａと集合Ｂの共通部分は空集合であり、集合Ｂと集合Ｃの共通部分は空集合であり、集合Ｄと集合Ｅの共通部分は集合Ｆであるとする。
【００５１】
まず、探索部２２は、集合Ａを選択すると、集合Ａと有向性で結ばれた集合Ｂを集合Ａの隣に配置し、図９の（１）に示す［集合Ａ，集合Ｂ］の行列を生成する。この行列では、集合Ａから集合Ｂへの右方向に関係性があることから、横方向の関係性を示す行列に［１］が設定される。
【００５２】
次に、探索部２２は、集合Ｂと有向性で結ばれた集合Ｃが存在することから、集合Ｃの配置を検討する。具体的には、探索部２２は、集合Ｂの隣に配置することで、図９の（２）に示す［集合Ａ，集合Ｂ，集合Ｂ］の行列を生成する。この行列では、集合Ａから集合Ｂへの右方向および集合Ｂから集合Ｃへの右方向に関係性があることから、横方向の関係性を示す行列に［１，１］が設定される。
【００５３】
別配置として、探索部２２は、集合Ｃを集合Ｂの右下に配置する配置を探索し、集合がない位置に０を設定することで、図９の（３）に示す２行３列の行列を生成する。この行列では、集合Ａから集合Ｂへの右方向の行列に［１］、いずれの関係性もない縦方向の行列に［０］、集合Ｂから集合Ｃに該当する左上から右下への交点方向の行列に［２］が設定された各行列が生成される。
【００５４】
別配置として、探索部２２は、集合Ｂの下に集合Ｃを配置する配置を探索し、集合がない位置に０を設定することで、図９の（４）に示す２行２列の行列を生成する。この行列では、集合Ａから集合Ｂへの右方向の行列に［１］、集合Ｂから集合Ｃへの下方向に行列［１］、いずれの関係性もない交点方向の行列に［０］が設定された各行列が生成される。
【００５５】
別配置として、探索部２２は、集合Ａの下に集合Ｃを配置する配置を探索し、集合がない位置に０を設定することで、図９の（５）に示す２行２列の行列を生成する。この行列では、集合Ａから集合Ｂへの右方向の行列に［１］、集合Ａから集合Ｃへの下方向に行列［１］、集合Ｂから集合Ｃに該当する右上から左下への交点方向の行列に［３］が設定された各行列が生成される。
【００５６】
このようにして、探索部２２は、集合Ａ、集合Ｂ、集合Ｃの配置として、上記（１）から（５）の５パターンを探索することができる。なお、探索部２２は、（３）のパターンについては、（２）のパターンと（４）のパターンで代用可能なことから、対象外と判定して削除する。
【００５７】
同様に、探索部２２は、集合Ｄと集合Ｅについても、集合Ｄと有向性で結ばれた集合Ｅを集合Ａの隣に配置し、図９の（６）に示す［集合Ｄ，集合Ｅ］の行列を生成する。この行列では、集合と集合Ｅが積集合の関係性があることから、横方向の関係性を示す行列に［３］が設定される。
【００５８】
（集合の配置範囲拡張の組み合わせを探索）
図１０は、集合の配置範囲を拡張した組み合わせの探索処理の流れを示すフローチャートであり、図１１は、集合の配置範囲の拡張探索を説明する図であり、図１２は、集合の配置範囲の拡張探索結果を説明する図である。
【００５９】
図１０に示すように、拡張探索部２３は、配列Ｖ（変数Ｖ）に未処理の組み合わせが残っている場合（Ｓ４０１：Ｙｅｓ）、配列Ｖから一つの組み合わせＷを取り出して、配列Ｘ（変数Ｘ）に格納する（Ｓ４０２）。
【００６０】
続いて、拡張探索部２３は、組み合わせＷの集合の行列に未調査の０がある場合（Ｓ４０３：Ｙｅｓ）、０と周囲の行列Ａｉｊの間にある関係性が０か否かを判定する（Ｓ４０４）。
【００６１】
ここで、拡張探索部２３は、０と周囲の配列Ａｉｊの間にある関係性が０である場合（Ｓ４０４：Ｙｅｓ）、集合の行列の０の位置に行列Ａｉｊの集合をコピーしたものを配列Ｘに格納する（Ｓ４０５）。その後、拡張探索部２３は、０の周りに未調査の集合が残っている場合には（Ｓ４０６：Ｙｅｓ）、Ｓ４０４以降を繰り返す。
【００６２】
なお、拡張探索部２３は、Ｓ４０４において、０と周囲の配列Ａｉｊの間にある関係性が０ではない場合（Ｓ４０４：Ｎｏ）、Ｓ４０５を実行することなく、Ｓ４０６を実行する。また、拡張探索部２３は、Ｓ４０６において、０の周りに未調査の集合が残っていない場合には（Ｓ４０６：Ｎｏ）、Ｓ４０３以降を繰り返す。
【００６３】
また、拡張探索部２３は、Ｓ４０１において、配列Ｖに未処理の組み合わせが残っていない場合（Ｓ４０１：Ｎｏ）、集合の行列を変換することで重複するものを１つ残して配列Ｘから除外する（Ｓ４０７）。
【００６４】
（具体例）
図１１と図１２を用いて具体例を説明する。まず、図１１を用いて、上述した図９の配置パターン（５）を例にして説明する。図１１に示すように、拡張探索部２３は、図９の配置パターン（５）の拡張パターンとして、集合Ｂの下の「０」に、当該「０」の周囲の集合をコピーすることで、３つの拡張パターンを探索する。
【００６５】
具体的には、拡張探索部２３は、集合Ｂを上下に配置した拡張パターン（ａ）と、集合Ｂの下に集合Ｃを配置した拡張パターン（ｂ）と、集合Ｂの下に集合Ａを配置した拡張パターン（ｃ）とを探索する。ここで、拡張探索部２３は、拡張パターン（ｃ）については、集合Ｂから集合Ｃへの関係性が存在することから、左上の集合Ａと拡張した右下の集合Ａとを結合することができないので、拡張できないと決定する。この結果、拡張探索部２３は、図９の配置パターン（５）の拡張パターンとして、拡張パターン（ａ）と拡張パターン（ｂ）の２つを探索する。
【００６６】
このような拡張探索の結果を図１２に示す。図１２は、図９に示した配置パターン（２）、（４）、（５）、（６）の拡張パターンの探索結果である。なお、配置パターン（１）は、未配置の集合があることから除外される。
【００６７】
具体的には、配置パターン（２）について、値が「０」の位置に、隣接する集合Ａを配置した拡張パターン（２）、隣接する集合Ｃを配置した拡張パターン（３）、隣接する集合Ｂを配置した拡張パターン（４）および（５）が探索される。ここで、拡張パターン（４）は、集合Ａと集合Ｃの間に関係性がないことから、図１１のパターン（ｃ）とは異なり、関係性を跨ぐ配置にならないので、採用される。
【００６８】
拡張配置パターン（２）は、集合Ａを縦方向に並べた行列となるので、縦方向の関係性の行列に同一を示す［４］が設定される。拡張配置パターン（３）は、集合Ｃを横方向に並べた行列となるので、横方向の関係性の行列に同一を示す［４］が設定される。拡張配置パターン（４）は、集合Ｂを交点方向に並べた行列となるので、交点方向の関係性の行列に同一を示す［７］が設定される。拡張配置パターン（５）は、集合Ｂを縦方向に並べた行列となるので、縦方向の関係性の行列に同一を示す［４］が設定される。
【００６９】
（ノードの配置）
図１３は、ノードの配置処理の流れを示すフローチャートであり、図１４と図１５は、ノードの配置の具体例１を説明する図であり、図１６と図１７は、ノードの配置の具体例２を説明する図である。
【００７０】
図１３に示すように、配置部２４は、図１０の拡張探索処理のＳ４０２で格納された配列Ｘに未処理の組み合わせが残っている場合（Ｓ５０１：Ｙｅｓ）、描画範囲内のランダムな位置に、集合の配列通りにノードの描画範囲を生成する（Ｓ５０２）。
【００７１】
続いて、配置部２４は、集合の範囲内にノードをランダムに配置する（Ｓ５０３）。そして、配置部２４は、集合の関係性がある範囲でのみ影響しあうように、スプリングアルゴリズムでノードを配置し（Ｓ５０４）、集合の範囲とノードの相対位置を固定する（Ｓ５０５）。その後、配置部２４は、現在表示されているノードのうち、集合の関係性がないノード間の関係を探索して描画する（Ｓ５０６）。
【００７２】
そして、配置部２４は、集合の関係性で結ばれた描画領域を一つのノードとみなし、新たに描画されたノードを加えてスプリングアルゴリズムで描画する（Ｓ５０７）。例えば、配置部２４は、直接関係がある場合は直線で結ぶ。また、配置部２４は、集合の範囲内に入らないように、複数ノードがある場合は等分して関係が近い順に並べる。
【００７３】
その後、配置部２４は、ノードの相対位置を解除し（Ｓ５０８）、スプリングアルゴリズムで再描画する（Ｓ５０９）。ただし、集合に属するノードは、その範囲から出ることはなく、属さないノードはその範囲に入ることはない。そして、配置部２４は、集合の範囲とノードの相対位置を固定し（Ｓ５１０）、Ｓ５０１以降を繰り返す。
【００７４】
また、Ｓ５０１において、配置部２４は、図１０の拡張探索処理のＳ４０２で格納された配列Ｘに未処理の組み合わせが残っていない場合（Ｓ５０１：Ｎｏ）、各組み合わせについて、安定している配置を求めて採用する（Ｓ５１１）。例えば、配置部２４は、集合の範囲の中心とその集合に属するノードの距離の２乗の平均が最も小さい配置や、ノード間の距離の標準偏差が最も小さい配置などを採用する。
【００７５】
その後、配置部２４は、まだ配置されていないノードを、関係するエッジがつながっているノードの近くに配置し（Ｓ５１２）、追加されたノードをスプリングアルゴリズムで配置する（Ｓ５１３）。
【００７６】
（具体例）
例えば、配置部２４は、集合の配置の組み合わせのうち一つとして、図１４の（１）に示すように、［集合Ａ、集合Ｂ、集合Ｃ］と［集合Ｄ、集合Ｅ］をランダムに配置する。続いて、図１４の（２）に示すように、配置部２４は、各集合内にノードを配置し、スプリングアルゴリズムで描画する。
【００７７】
そして、配置部２４は、図１４の（３）に示すように、集合内のノードを配置した後、集合に含まれないノードのうち別の関係性間を有するノードを、集合外に配置して連結する。その後、配置部２４は、図１４の（４）に示すように、関係性で結ばれた集合を１つのノードとして扱った上で、スプリングアルゴリズムで描画する。
【００７８】
その後、配置部２４は、図１５に示すように、配置された集合に含まれない未配置のノードを配置し、スプリングアルゴリズムで描画する。このとき、配置部２４は、スプリングアルゴリズムで描画する際は、新たに配置した（追加した）ノードのみを動かして配置を行う。
【００７９】
同様に、配置部２４は、集合の配置の組み合わせのうち一つとして、図１６の（１）に示すように、［集合Ａ、集合Ｂ、集合Ｃ］と［集合Ｄ、集合Ｅ］をランダムに配置する。この具体例２は、具体例１とは異なり、集合Ｂが拡張探索により配置されたパターンである。続いて、図１６の（２）に示すように、配置部２４は、各集合内にノードを配置し、スプリングアルゴリズムで描画する。
【００８０】
そして、配置部２４は、図１６の（３）に示すように、集合内のノードを配置した後、集合に含まれないノードのうち別の関係性間を有するノードを、集合外に配置して連結する。その後、配置部２４は、図１６の（４）に示すように、関係性で結ばれた集合を１つのノードとして扱った上で、スプリングアルゴリズムで描画する。
【００８１】
その後、配置部２４は、図１７に示すように、配置された集合に含まれない未配置のノードを配置し、スプリングアルゴリズムで描画する。このとき、配置部２４は、スプリングアルゴリズムで描画する際は、新たに配置した（追加した）ノードのみを動かして配置を行う。
【００８２】
このようにして、配置部２４は、各集合の配置の組み合わせについて、図１３の処理を実行して、各構造を描画する。そして、配置部２４は、最も安定している配置の組み合わせを選択し、配置結果ＤＢ１６に格納する。
【００８３】
［効果］
上述したように、描画装置１０は、ノードの属性ごとに集合を生成し、有向性の関係性をもとに集合間の位置の組み合わせを探索する。そして、描画装置１０は、探索した位置関係を保持したまま、集合に属するノードを描画した後、残りのノードを描画する。その後、描画装置１０は、描画した配置をもとに、最も安定している配置を採用する。したがって、描画装置１０は、視覚的に理解しやすいグラフを描画することができる。
【００８４】
図１８は、グラフ描画結果を説明する図である。図１８では、属性が「対策」である集合（対策）、属性が「病名」である集合（病名）、属性が「症状」である集合（症状）と各ノードを描画した例である。図２の（ａ）に示すような一般的なスプリングアルゴリズムでは、属性である病名や対策がバラバラに配置されてしまい、１つの症状（ノード）がどの病名でどの対策と関係しているのかを直感的に把握することが難しい。一方、図１８に示すように、描画装置１０を用いて描画されたグラフは、関係性が一定方向に定まっていることから、属性ごとの関係性が明確であり、各属性に属するノードも明確である。したがって、１つの症状（ノード）がどの病名でどの対策と関係しているのかを直感的にも視覚的にも把握することが容易である。
【実施例２】
【００８５】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。
【００８６】
［関係性の判定］
例えば、属性間やノード間の有向性の有無を判定する手法は、公知の様々な手法を採用することができる。また、属性の一例としては、上述した例以外にも、クラス、データ値、データタイプなどを用いることができる。また、集合を生成して配置する例を説明したが、ノードの数が少ない場合などは、ノードの属性を上述した処理に適用して配置処理を実行することもできる。なお、拡張探索処理は、省略することもできる。
【００８７】
［数値等］
また、上記実施例で用いたノードの数、集合の数、閾値、行列の値、属性名、属性数等は、あくまで一例であり、任意に変更することができる。また、拡張処理は、省略することもでき、拡張処理を行わずに、ノード配置を行うことで、グラフを描画することもできる。また、各処理において、途中経過などを一時的に保存する先として、配列などを用いた例を説明したが、これに限定されるものではなく、プログラム等で利用される変数や一時領域などを用いることもできる。
【００８８】
［システム］
上記文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報については、特記する場合を除いて任意に変更することができる。
【００８９】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散や統合の具体的形態は図示のものに限られない。つまり、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。
【００９０】
さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
【００９１】
［ハードウェア］
図１９は、ハードウェア構成例を説明する図である。図１９に示すように、描画装置１０は、通信装置１０ａ、ＨＤＤ（Hard  Disk  Drive）１０ｂ、メモリ１０ｃ、プロセッサ１０ｄを有する。また、図１９に示した各部は、バス等で相互に接続される。
【００９２】
通信装置１０ａは、ネットワークインタフェースカードなどであり、他のサーバとの通信を行う。ＨＤＤ１０ｂは、図１に示した機能を動作させるプログラムやＤＢを記憶する。
【００９３】
プロセッサ１０ｄは、図１に示した各処理部と同様の処理を実行するプログラムをＨＤＤ１０ｂ等から読み出してメモリ１０ｃに展開することで、図１等で説明した各機能を実行するプロセスを動作させる。例えば、このプロセスは、描画装置１０が有する各処理部と同様の機能を実行する。具体的には、プロセッサ１０ｄは、検出部２１、探索部２２、拡張探索部２３、配置検討部２４等と同様の機能を有するプログラムをＨＤＤ１０ｂ等から読み出す。そして、プロセッサ１０ｄは、検出部２１、探索部２２、拡張探索部２３、配置検討部２４等と同様の処理を実行するプロセスを実行する。
【００９４】
このように、描画装置１０は、プログラムを読み出して実行することで描画方法を実行する情報処理装置として動作する。また、描画装置１０は、媒体読取装置によって記録媒体から上記プログラムを読み出し、読み出された上記プログラムを実行することで上記した実施例と同様の機能を実現することもできる。なお、この他の実施例でいうプログラムは、描画装置１０によって実行されることに限定されるものではない。例えば、他のコンピュータまたはサーバがプログラムを実行する場合や、これらが協働してプログラムを実行するような場合にも、本発明を同様に適用することができる。
【符号の説明】
【００９５】
１０  描画装置
１１  通信部
１２  記憶部
１３  ノードデータＤＢ
１４  集合データＤＢ
１５  エッジ情報ＤＢ
１６  配置結果ＤＢ
２０  制御部
２１  検出部
２２  探索部
２３  拡張探索部
２４  配置部
【図１】
2020194459.tif 000003
【図２】
2020194459.tif 000004
【図３】
2020194459.tif 000005
【図４】
2020194459.tif 000006
【図５】
2020194459.tif 000007
【図６】
2020194459.tif 000008
【図７】
2020194459.tif 000009
【図８】
2020194459.tif 000010
【図９】
2020194459.tif 000011
【図１０】
2020194459.tif 000012
【図１１】
2020194459.tif 000013
【図１２】
2020194459.tif 000014
【図１３】
2020194459.tif 000015
【図１４】
2020194459.tif 000016
【図１５】
2020194459.tif 000017
【図１６】
2020194459.tif 000018
【図１７】
2020194459.tif 000019
【図１８】
2020194459.tif 000020
【図１９】
2020194459.tif 000021