質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

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

Q&A

解決済

1回答

3424閲覧

Japanmapを使って日本地図を表示させたいができない。エラーもなし。

Kumazaemon

総合スコア5

Python 3.x

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

0グッド

0クリップ

投稿2020/10/27 13:49

やりたいこと

Visual Studio CodeとPython3で、Japanmapを使って日本地図で県別のデータ可視化をしたいと思っています。
Windows 7です。

状況

Japanmapの地図を表示させたいと思い、以下を試しました。
しかし、エラーも出なければ、画像も表示されず、プロンプトが戻ってくるだけで、何の音沙汰もなし…。

該当のソースコード

from japanmap import picture
import matplotlib.pyplot as plt

plt.imshow(picture())

試したこと

pyplotがデフォルトで非常時になるという話を見つけたので、設定を確認しましたが該当しませんでした。
ただの折れ線グラフは表示できるので、pyplotの問題ではないのかと思っています。

cv2もインストール済みです(必要か分からないけどググったら関係ありそうだったので)。

また、開発サイトにあった、japanmap の都道府県名認識、県別コードの認識コードは問題なく実行できています。picture()関数だけが音沙汰なしの状況です。

japanamapでググっても、Jupiter notebook環境のサイトしかヒットせず、確かに、別のPC(Win7)でJupiter notebookを使ってやってみたら、ちゃんと表示されました。
もしかするとこのパッケージはJupiter専用なのかな、とも考えましたが、そうだと判断できる情報も見当たりませんでした。

補足情報

初心者で、せっかくV Codeを使えるようになってきたので、Jupiter notebookと併用できずにCode環境で進められればと思っています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

末尾にplt.show()追加してください。

Jupyter Notebookなどには、plt.show()がなくても自動的に表示する機能が備わっています。

Python

1from japanmap import picture 2import matplotlib.pyplot as plt 3 4plt.imshow(picture()) 5plt.show()

表示されるウィンドウ

追加分:
cv2.imreadが日本語を含むパスを指定すると読み込みに失敗するため、np.fromfileで読み込んで cv2.imdecodeで画像データを得るようにして回避します。

Python OpenCV の cv2.imread 及び cv2.imwrite で日本語を含むファイルパスを取り扱う際の問題への対処について - Qiita

japanmapのインストール先(XXXXX/lib/site-packages/japanmap)にある__init__.pyをテキストエディターで開くと、30行目あたりからpictureの処理が書いてあります。上記の記事に従って、以下のように2カ所を書き換えて保存してください。

Diff

1def picture(dic=None, rate=1): 2 """ラスターデータ""" 3- from cv2 import imread, floodFill 4+ from cv2 import imread, floodFill, imdecode, IMREAD_COLOR

Diff

1- p = imread(str(Path(__file__).parent / "japan.png")) 2+ p = imdecode(np.fromfile(str(Path(__file__).parent / "japan.png"), np.uint8), IMREAD_COLOR)

これで、日本語を含むパスでもpictureで地図を読めるはずです。

投稿2020/10/27 14:04

編集2020/10/29 14:30
Daregada

総合スコア11990

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

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

Kumazaemon

2020/10/28 02:40

ご回答ありがとうございます。試したところ、以下のエラーが出現しました。 TypeError: Image data of dtype object cannot be converted to float picture()で画像データが返されるので、plt.show()が、ご指摘いただいた plt.imshow()に相当するのではないかと思います。
Daregada

2020/10/28 03:27

> picture()で画像データが返されるので、plt.show()が、ご指摘いただいた plt.imshow()に相当するのではないかと思います。 いいえ。plt.imshow(picture())は、描画処理を行なうだけです。Jupyterはこの状態で画像を表示する機能を持っているため、Jupyterを使っているなら、ここまででいいのです。 描画が終わった画像を表示するには、plt.show()を、plt.imshow(pictue())の後に追加してください。
Kumazaemon

2020/10/28 04:54

そうなのですね。ご教示ありがとうございます。 教えて頂いた手順でやってみましたが、先の回答のとおり、 TypeError: Image data of dtype object cannot be converted to float になります・・・。 ちなみに、別のPC(win10)のVCでもやってみましたが、同じエラーになります。
Daregada

2020/10/28 10:00

ええと、Pythonのモジュール検索パスに日本語が含まれていませんか? 「import sys」と「print(sys.path)」だけのファイルを実行するか、Pythonの対話モードでその2行を実行してみてください。結果として表示されるリストの中のフルパスに、日本語の文字が含まれているのでは、と推測します(ユーザー名の部分とか)。 japanmapのpictureが使っている、cv2モジュール(OpenCV2に付属)のimreadが、日本語を含むパスを指定した画像の読み込みに失敗するので、japanmapのインストール先(site-packagesなど)のフルパスに日本語が含まれていると、画像の表示を行なえません。
Kumazaemon

2020/10/29 01:54

そうなのですね! アドバイスいただいたコマンドでパスを確認したところ、たしかに日本語ユーザ名が入っていました。 PC購入時に日本語でユーザ名を設定し、その後海外のソフトが動かなかったので、英語名に変更したのですが、内部で初期のユーザ名が残っているのには気が付いていました・・・。 ユーザ名に日本語を使っていないPCを探して試したところ、確かに最初に教えていただいたコードで、表示がなされました。 私のPCでこの次どうしたらよいかはまだ分かりませんが(笑)、理由がスッキリしたので良かったです。 ありがとうございました!!
Daregada

2020/10/29 03:23

japanmapの__init__.pyを少し修正すれば表示できます。いまちょっと時間がないので、後で書いておきます
Kumazaemon

2020/10/29 13:44

めちゃめちゃ感謝です。m(_”_)m お時間の空いた時で全然構いませんので、どうぞお願いします!
Kumazaemon

2020/10/30 00:47

すごい!! できました。うれしいです。 何から何まで、本当にありがとうございました。 助かりましたし、勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問