第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. 完了したらメッセージを表示
- うまくいったら最後に保存先を表示します。
★ まとめると:
このプログラムは、人物の情報を入れて関係を指定するだけで、きれいな相関図が簡単に作れる便利なプログラムです。
特に小説や物語など、登場人物が多くて関係性が複雑な場合に役立ちます。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます