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

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

新規登録して質問してみよう
ただいま回答率
85.46%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

Q&A

解決済

1回答

2743閲覧

Japanize_matplotlibの動かし方について

yuuit

総合スコア6

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python

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

0グッド

0クリップ

投稿2023/10/16 12:35

実現したいこと

・Japanize_matplotlibを動かすこと

前提

Japanize_matplotlibをインストールして動かそうとしたのですが、
'distutils'ファイルが見つからない旨のメッセージが出てきて
使えませんでした。
一度消して再インストールを試みましたが結果は変わりませんでした。
正直、ここからどうすればよいか見当もつかない状況です。
distutilsが必要かなというのはなんとなくわかるのですが...

どなたか知見をお持ちの方はいますでしょうか?
よろしくお願いします。

発生している問題・エラーメッセージ

Traceback (most recent call last):
File "C:\Users\○○○\Desktop\○○\python\chap_chap○○.py", line 3, in <module>
import japanize_matplotlib
File "C:\Users\○○○\AppData\Local\Programs\Python\Python312\Lib\site-packages\japanize_matplotlib_init_.py", line 1, in <module>
from japanize_matplotlib.japanize_matplotlib import japanize, get_font_path, get_font_ttf_path
File "C:\Users\○○○\AppData\Local\Programs\Python\Python312\Lib\site-packages\japanize_matplotlib\japanize_matplotlib.py", line 5, in <module>
from distutils.version import LooseVersion
ModuleNotFoundError: No module named 'distutils'

該当のソースコード

Python

ソースコード

import pandas as pd
import matplotlib.pyplot as plt
import japanize_matplotlib

df=pd.read_csv("test.csv")

df.plot()
plt.show

試したこと

・スペルミスの確認
・モジュールのアンインストール、再インストール

補足情報(FW/ツールのバージョンなど)

IDLE Shell 3.12.0

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

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

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

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

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

meg_

2023/10/16 14:42

> Japanize_matplotlibをインストールして動かそうとしたのですが どのような方法(コマンド)でインストールしましたか?
yuuit

2023/10/16 22:37

pip install japanize-matplotlib です。 環境はWindowsです。
jbpb0

2023/10/17 04:08

> ModuleNotFoundError: No module named 'distutils' https://codezine.jp/article/detail/18466 とかによると、「distutils」はpython 3.12では削除されてますので、どうしても3.12じゃないとダメという理由が無いなら、3.11までのどれかを使うといいと思います なお、同じパソコンに複数のpythonをインストールするとトラブルの原因になるので、3.12が不要なら削除することをお勧めします
yuuit

2023/10/17 11:23

ご丁寧な説明のほどありがとうございます。 状況については理解しました。 アンインストールした結果、別の問題が発生しました。 別バージョンのpythonを使ったところ、pipがコマンドプロンプトで起動できなくなってしまいました。 echo %PATH%で何も表示されないことから、Pathのつなげ方に問題があるとみてますが、具体的な方法はわからない状態です。 もしよければ改めて、Pathのつなげ方についてご教示いただきたいとありがたいです。 よろしくお願いします。 長々しくなってしまったので、もしかして改めて質問をした方がよかったりしますでしょうか?
guest

回答1

0

ベストアンサー

コメント欄にあるようにPython 3.12以降はdistutilsパッケージが削除されているので
理論上はjapanize-matplotlibパッケージは動きません。

しかし,せっかくのオープンソースなので,パッケージのソースの中身を確認してみると,
どうやらdistutilsを使っているのはmatplotlibのバージョンの条件分けだけのようです。
そこで,ローカルに保存されているjapanize-matplotlibのソースを
distutilsを使わない方法に少し修正すると動くようになると思います。
(いわゆるハック)
識者からはバージョン管理が壊れるとかの批判を浴びるかもしれませんが,
悪いのは3.12に対応していないjapanize-matplotlibなので,私が悪いわけではありませんから。

さて,ググって標準ライブラリでバージョン比較できる方法を探してみました。
おそらく次のような変更で使えるようになると思います。

IDLEのエディタで次のファイルを開きます。

C:\Users\○○○\AppData\Local\Programs\Python\Python312\Lib\site-packages\japanize_matplotlib\japanize_matplotlib.py

このファイルはpipでインストールしたjapanize_matplotlibのファイルの一部です。

次のdiff(差分)のように変更します。

diff

1--- japanize_matplotlib.py.old 2023-10-17 19:27:00.386901751 +0900 2+++ japanize_matplotlib.py 2023-10-17 19:30:11.008471267 +0900 3@@ -2,7 +2,7 @@ import os 4 5 import matplotlib 6 from matplotlib import font_manager 7-from distutils.version import LooseVersion 8+from pkg_resources import parse_version 9 10 FONTS_DIR = 'fonts' 11 FONT_NAME = "IPAexGothic" 12@@ -13,7 +13,8 @@ def japanize(): 13 font_dir_path = get_font_path() 14 font_dirs = [font_dir_path] 15 font_files = font_manager.findSystemFonts(fontpaths=font_dirs) 16- is_support_createFontList = LooseVersion(matplotlib.__version__) < '3.2' 17+ is_support_createFontList = ( 18+ parse_version(matplotlib.__version__) < parse_version('3.2')) 19 if is_support_createFontList: 20 font_list = font_manager.createFontList(font_files) 21 font_manager.fontManager.ttflist.extend(font_list)

from distutils.version import LooseVersionの行を
from pkg_resources import parse_versionに,
is_support_createFontList = LooseVersion(matplotlib.__version__) < '3.2'
is_support_createFontList = (parse_version(matplotlib.__version__) < parse_version('3.2'))
に変更する感じです。(2つ目は\を使わない二行分け方法)

2つ目の修正はif文の中なので,インデントに注意して下さい。

pkg_resourcessetuptoolsが入っていなければ使えないようなのですが,
pipでパッケージを管理していれば,大体入っていると思うので,まぁ問題ないでしょう。

追記

新しいWindows環境を構築することがあり,上記回答のコードを試したところうまくいかなかったので,
自前で簡易的なバージョンチェック関数を用意する修正版を追記します。

diff

1--- japanize_matplotlib.py.old 2023-10-24 21:25:12.616377790 +0900 2+++ japanize_matplotlib.py 2023-10-24 21:26:23.053102208 +0900 3@@ -2,19 +2,25 @@ import os 4 5 import matplotlib 6 from matplotlib import font_manager 7-from distutils.version import LooseVersion 8+import re 9 10 FONTS_DIR = 'fonts' 11 FONT_NAME = "IPAexGothic" 12 FONT_TTF = 'ipaexg.ttf' 13 14 15+def _is_support_createFontList(version): 16+ # check matplotlib version < 3.2 17+ pn = re.search(r'([0-9]+)\.([0-9]+)[^0-9]*', version) 18+ ver_plus_subver_per_1000 = float(pn.group(1)) + float(pn.group(2)) / 1000 19+ return ver_plus_subver_per_1000 < 3 + 2 / 1000 20+ 21+ 22 def japanize(): 23 font_dir_path = get_font_path() 24 font_dirs = [font_dir_path] 25 font_files = font_manager.findSystemFonts(fontpaths=font_dirs) 26- is_support_createFontList = LooseVersion(matplotlib.__version__) < '3.2' 27- if is_support_createFontList: 28+ if _is_support_createFontList(matplotlib.__version__): 29 font_list = font_manager.createFontList(font_files) 30 font_manager.fontManager.ttflist.extend(font_list) 31 else:

投稿2023/10/17 11:19

編集2023/10/24 13:59
ujimushi_sradjp

総合スコア2105

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

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

yuuit

2023/10/17 12:22

改めて、誠に丁寧なご回答ありがとうございます。 結論から言うと、私のpythonへのユーザー環境変数へのPathが複数あったことが原因で、Pathを一つにしたら問題なく動きました。 結果的に、ヴァージョンを下げたことで問題は解決できたと考えています。 (この表現が適切かはわかりませんが、今はご容赦ください) 上記のような、テクニカルな対応方法があるとわかったことは非常に勉強になりました。 お世話になりました、またの機会があればぜひ質問させていただきたいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問