Q(koshix):
参議院議員選挙の後の日本の政治状況を2次元グラフで表現したいと思います。
x軸正方向を右派,負方向を左派とします。
y軸正方向をエリート主義,負方向をポピュリズムとします。
各政党をその得票数に比例した面積に比例する円で表わします。政党のシンボルカラーで各政党の円を塗りつぶします。各政党の政策やニュース情報でそれぞれの政党の立ち位置を定めてください。
参考イメージとして米国の政治主張を例とした2次元グラフを添付します。(上図)
A(ChatGPT o3):
(注:フォント設定部分だけはこちらで修正している)
import math
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.font_manager as fm
from matplotlib import rcParams
# フォントの設定
font_path = '/System/Library/Fonts/ヒラギノ丸ゴ ProN W4.ttc' # 適切な日本語フォントファイルを指定してください
font_prop = fm.FontProperties(fname=font_path)
rcParams['font.family'] = font_prop.get_name()
# --- データ(比例代表の得票率、Wikipedia「政党色」準拠の色) ---
data = [
# 政党, 略称, x(右派+ 左派-), y(エリート+ ポピュリズム-), 比例得票率(%), 色(Template:政党色)
("自由民主党", "自民", 0.55, 0.65, 21.64, "#3CA324"),
("公明党", "公明", 0.15, 0.55, 8.80, "#F55881"),
("立憲民主党", "立民", -0.35, 0.35, 12.50, "#184589"),
("国民民主党", "国民", 0.25, 0.10, 12.88, "#F8BC00"),
("日本維新の会","維新", 0.60, -0.25, 7.39, "#6FBA2C"),
("参政党", "参政", 0.90, -0.75, 12.55, "#D85D0F"),
("日本保守党", "保守", 0.85, -0.50, 5.04, "#0A82DC"),
("日本共産党", "共産", -0.70, -0.05, 4.84, "#DB001C"),
("れいわ新選組","れいわ",-0.55,-0.45, 6.56, "#E4027E"),
("社会民主党", "社民", -0.60, 0.15, 2.06, "#01A8EC"),
("チームみらい","みらい",0.05, 0.30, 2.56, "#66FFCC"),
("NHK党", "NHK", 0.50, -0.60, 1.15, "#F8EA0D"),
]
df = pd.DataFrame(data, columns=["政党","略称","x","y","比例得票率(%)","色"])
# 円の面積を得票率に比例させる(matplotlib の s は半径ではなく面積に相当)
SCALE = 1000 # 視認性のための調整係数。お好みで。
df["size"] = df["比例得票率(%)"] * SCALE
# 確認用にCSV出力
df.to_csv("party_positions_2025.csv", index=False, encoding="utf-8-sig")
print(df[["政党","略称","比例得票率(%)","x","y"]])
# 描画
plt.figure(figsize=(8,8), dpi=200)
plt.axhline(0, color="black", linewidth=1)
plt.axvline(0, color="black", linewidth=1)
plt.xlim(-1.05, 1.05)
plt.ylim(-1.05, 1.05)
plt.xlabel("← 左派 右派 →")
plt.ylabel("ポピュリズム ↓ エリート主義 ↑")
plt.grid(True, linewidth=0.3, alpha=0.4)
for _, r in df.iterrows():
plt.scatter(r["x"], r["y"], s=r["size"], c=r["色"], alpha=0.35,
edgecolors="black", linewidths=0.6)
plt.text(r["x"], r["y"], r["略称"], ha="center", va="center",
fontsize=9, fontweight="bold")
plt.title("2025年参議院議員選挙後の日本政治 2軸配置(比例得票率で面積・試案)")
plt.tight_layout()
plt.savefig("japan_political_2d_2025.png", bbox_inches="tight")
plt.show()