teratail header banner
teratail header banner
質問するログイン新規登録
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

138閲覧

Pythonのjapanmapで日本地図を描画したのですが、地図が実際のデータとリンクしていません。

travel_every

総合スコア1

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2025/07/08 05:34

0

0

実現したいこと

2024年に行われた衆院選における投票率を都道府県別にまとめたデータを視覚化したい。

発生している問題・分からないこと

Pythonのjapanmapライブラリと総務省のデータを加工したCSVファイルを用いて、都道府県別の投票率を表現した日本地図を描画したのですが、これが実際のデータと合っていません。
データと実際に描画した日本地図の画像を添付します。
イメージ説明
イメージ説明
例えば山形県の投票率は60%を超えているので、本来であれば濃い赤色で表現されるべき所ですが、なぜか薄い赤色になっています。このように、描画された地図が実際のデータとリンクしていないという状況です。

エラーメッセージ

error

1エラーメッセージは出ていませんが、地図が正しく出力されていません。

該当のソースコード

Python

1!pip install japanmap 2!pip install japanize_matplotlib 3import matplotlib.pyplot as plt 4import pandas as pd 5 6data_df = pd.read_csv('/content/todouhuken_touhyouritsu.csv') 7 8from japanmap import picture 9import japanize_matplotlib 10cmap = plt.get_cmap("Reds") 11norm = plt.Normalize(vmin=data_df['計'].min(), vmax=data_df['計'].max()) 12fcol = lambda x: "#" + bytes(cmap(norm(x), bytes=True)[:3]).hex() 13pic = picture(data_df['計'].apply(fcol)) 14plt.title('第50回衆院選(2024)都道府県別投票率(比例代表)') 15plt.colorbar(plt.imshow(pic, cmap, norm)) 16plt.savefig(f"第50回衆院選(2024)投票率(比例代表).png") 17plt.show()

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Googleでjapanmapを使っている方の記事を調べましたが、私の事例のように地図とデータの整合性が取れていない例を見つけることができず、解決には至りませんでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2025/07/08 09:57

解決済みになっていますが、本当に正しくプロットできていますか? 元データが画像の通りだとすると、都道府県コードの順に並んでいないので、神奈川〜福井あたりのデータが違う場所にプロットされているんじゃないでしょうか。 picture(data_df.set_index('都道府県')['計'].apply(fcol)) と、都道府県名をインデックスにするのがいいと思います。
travel_every

2025/07/08 10:20

ありがとうございます。 確かに神奈川は実際の投票率よりも色が濃いように見えますね。 都道府県名をインデックスにしてみたのですが、そうすると地図が真っ白になってしまいました。 データを都道府県コードの順に並べ直した所、正しく表示されました。
guest

回答1

0

ベストアンサー

japanmap の picture 関数のソースコードを確認してみると、if 1 <= i <= NUM_PREF: となっています。つまり、picture関数のパラメータとして指定する辞書のキー(都道府県)は1から47になっていることが前提となります。

japanmap/src/japanmap/init.py at master · SaitoTsutomu/japanmap

python

1def picture(dic=None, rate=1): 2 : 3 4 if hasattr(dic, "items"): 5 for k, v in dic.items(): 6 i = k if isinstance(k, int) else pref_code(k) 7 if 1 <= i <= NUM_PREF: 8 c = tuple(int(t * rate) for t in v) if isinstance(v, tuple) else getrgb(v) 9 floodFill(p, None, (pos[i][0] * 10, pos[i][1] * 10), c) 10 return p

ですが、Pandas の Series データのインデックスは 0 から始まります。なので、インデックスを +1 します。

python

1data_df = pd.read_csv('todouhuken_touhyouritsu.csv') 2data_df.index += 1

イメージ説明

投稿2025/07/08 07:25

melian

総合スコア21283

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

travel_every

2025/07/08 07:27

回答ありがとうございます。 試してみたら、無事正しい地図が描画されました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問