第5話……人物相関図をpythonを用いて描く

『黄金と血のアルゼンチン』第一章第21話の人物相関図をpythonで描いてみました。筆者がpythonで作成したSVG画像をスクショしたものです。


『黄金と血のアルゼンチン』第一章第21話

https://kakuyomu.jp/works/16818622170467685480/episodes/16818622171500944676


人物相関図

https://kakuyomu.jp/users/happy-isl/news/16818622171503229001


以下は、pythonのプログラムです。説明も描いておきました。


```python

import graphviz

import shutil


# Graphvizオブジェクト作成(SVGで出力)

dot = graphviz.Digraph(format='svg')

dot.attr(size='10', rankdir='TB', fontname="MS Mincho") # 日本語フォント指定

dot.node_attr.update(fontname="MS Mincho")

dot.edge_attr.update(fontname="MS Mincho")

dot.graph_attr.update(fontname="MS Mincho")


# 主要人物

dot.node('ルドラ', 'ルドラ・バッシャール\n(24歳)\n市長候補・実業家')

dot.node('カルメン', 'カルメン・バッシャール\n(36歳)\n妻')

dot.node('エレナ', 'エレナ・モラレス\n(30歳)\n愛人・次期市長室長')

dot.node('マリア', 'マリア・エバ・ドゥアルテ\n(16歳)\nエバ金融㈱CEO')

dot.node('李少峰', '李少峰(リー・シャオフェン)\n三合会のボス')

dot.node('李万麗', '李万麗(リー・ワンリー)\n李少峰の妻・交渉役')


# ルドラの部下

dot.node('タリオ', 'タリオ\n(21歳)\nルドラ缶詰工業㈱専務')

dot.node('ルシエンヌ', 'ルシエンヌ\n(19歳)\n司法府検察官・ルドラの愛人')

dot.node('モンバナ', 'モンバナ\n(2歳)\nルドラとルシエンヌの子')

dot.node('アドリアナ', 'アドリアナ・グラノジェルス\n(25歳)\nルドラ金融㈱COO')


# その他の関係者

dot.node('ゴンサーロ', 'ゴンサーロ・ゲレーロ\n(28歳)\n砂糖キビ農園経営')

dot.node('ヘロニモ', 'ヘロニモ・デ・アギラール\n(30歳)\nルドラ警備COO')


# 関係性

dot.edge('ルドラ', 'カルメン', label='正妻')

dot.edge('ルドラ', 'エレナ', label='愛人・部下')

dot.edge('ルドラ', 'マリア', label='協力関係')

dot.edge('ルドラ', '李万麗', label='交渉相手・関係を持つ')

dot.edge('李万麗', '李少峰', label='妻')

dot.edge('ルドラ', 'タリオ', label='部下')

dot.edge('ルドラ', 'ルシエンヌ', label='愛人・部下')

dot.edge('ルシエンヌ', 'モンバナ', label='母子')

dot.edge('ルドラ', 'アドリアナ', label='元愛人・幹部')

dot.edge('ルドラ', 'ゴンサーロ', label='協力者')

dot.edge('ルドラ', 'ヘロニモ', label='警備責任者')


# SVG形式で保存(拡大可能)

output_path = "人物相関図_第二章第2話_JP.svg"

dot.render(output_path, format='svg', cleanup=True)


# ファイル名の修正(拡張子の二重化を防ぐ)

corrected_svg_path = "人物相関図_第二章第2話_JP_fixed.svg"

shutil.move(output_path + ".svg", corrected_svg_path)


print(f"成功: {corrected_svg_path}")


******

★このプログラムの特徴

✅ 日本語フォントを正しく適用(`MS Mincho` を使用)

✅ SVG形式で出力(拡大しても画質が劣化しない)

✅ 横幅を抑えたレイアウト(スクリーンショットに収まりやすい)

✅ 登場キャラクターのみを表示(余計な人物を削除)

✅ 拡張子のミスを防止(二重拡張子問題を修正)


📌 実行環境に関して

- Graphvizがインストールされていることを確認(`pip install graphviz`)

- `MS Mincho` がシステムにインストールされていること


このスクリプトをコピーして、自由にご活用ください!

******


□詳細な説明

このプログラムは、Pythonというプログラミング言語を使って、人物相関図を作るためのものです。人物相関図とは、誰と誰がどのような関係にあるのかを視覚的にわかりやすく表した図です。


★ プログラムの内容(簡単な説明)


1. 必要なツールを使えるようにする

- `graphviz`というライブラリ(便利な機能をまとめたもの)を読み込みます。

- `shutil`というライブラリも読み込みます。これは、ファイルの名前を変えたり移動したりするために使います。


2. 相関図の設定をする

- 相関図のサイズや表示方向(縦向き)、日本語が表示できるように日本語フォントを設定します。


3. 人物を追加する

- `dot.node`を使って人物を追加しています。

- 各人物の名前や年齢、役職や関係性などを簡単に書いています。


例えば:

```python

dot.node('ルドラ', 'ルドラ・バッシャール\n(24歳)\n市長候補・実業家')

```

は、「ルドラ」という人物を追加し、24歳で市長候補・実業家であるという情報を表示します。`\n` は改行を意味します。


4. 人物同士の関係を追加する

- `dot.edge`を使って、人物間の関係を矢印で表しています。


例えば:

```python

dot.edge('ルドラ', 'カルメン', label='正妻')

```

は、「ルドラ」から「カルメン」に向かって「正妻」という関係の矢印を引いています。


5. 相関図を画像(SVG)として保存する

- 完成した相関図をSVG形式(拡大してもきれいな画像)で保存します。


6. ファイルの名前を整える

- 自動で作られたファイルの名前が少しおかしくなるので、それを正しく修正します。


7. 完了したらメッセージを表示

- うまくいったら最後に保存先を表示します。


★ まとめると:

このプログラムは、人物の情報を入れて関係を指定するだけで、きれいな相関図が簡単に作れる便利なプログラムです。

特に小説や物語など、登場人物が多くて関係性が複雑な場合に役立ちます。

  • Xで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る