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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

645閲覧

dir()関数にて、pyplotが見当たらない件

okahijiki

総合スコア404

Matplotlib

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

Python 3.x

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

0グッド

0クリップ

投稿2020/03/07 00:39

import matplotlib.pyplotにて、pyplotがインストールされます。
しかしdir()関数を使って、dir(matplotlib)にて、その中身を一覧してみると、pyplotは見当たりません。
これは、どのように解釈したら良いでしょう。

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

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

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

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

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

guest

回答1

0

ベストアンサー

モジュールmatplotlibpyplotという名前の属性を持っていない
と解釈すればいいです。


回答に誤認が合ったので追記します。

しかしdir()関数を使って、dir(matplotlib)にて、その中身を一覧してみると、pyplotは見当たりません。

というのは正しくありません。

確かに、

plain

1>>> import matplotlib 2 3>>> from pprint import pprint 4 5>>> pprint(dir(matplotlib)) 6['LooseVersion', 7 'MatplotlibDeprecationWarning', 8 'MutableMapping', 9 'Parameter', 10 'Path', 11 'RcParams', 12 'URL_REGEX', 13 '_DATA_DOC_APPENDIX', 14 '_DATA_DOC_TITLE', 15 '_ExecInfo', 16 '__bibtex__', 17 '__builtins__', 18 '__cached__', 19 '__doc__', 20 '__file__', 21 '__loader__', 22 '__name__', 23 '__package__', 24 '__path__', 25 '__spec__', 26 '__version__', 27 '_add_data_doc', 28 '_all_deprecated', 29 '_check_versions', 30 '_color_data', 31 '_create_tmp_config_or_cache_dir', 32 '_deprecated_ignore_map', 33 '_deprecated_map', 34 '_deprecated_remain_as_none', 35 '_ensure_handler', 36 '_error_details_fmt', 37 '_get_config_or_cache_dir', 38 '_get_data_path', 39 '_get_executable_info', 40 '_get_xdg_cache_dir', 41 '_get_xdg_config_dir', 42 '_init_tests', 43 '_label_from_arg', 44 '_log', 45 '_logged_cached', 46 '_open_file_or_url', 47 '_preprocess_data', 48 '_rc_params_in_file', 49 '_replacer', 50 '_version', 51 'atexit', 52 'cbook', 53 'checkdep_dvipng', 54 'checkdep_ghostscript', 55 'checkdep_inkscape', 56 'checkdep_pdftops', 57 'checkdep_ps_distiller', 58 'checkdep_usetex', 59 'colors', 60 'compare_versions', 61 'contextlib', 62 'cycler', 63 'dedent', 64 'defaultParams', 65 'default_test_modules', 66 'fontconfig_pattern', 67 'ft2font', 68 'functools', 69 'get_backend', 70 'get_cachedir', 71 'get_configdir', 72 'get_data_path', 73 'get_home', 74 'get_label', 75 'get_py2exe_datafiles', 76 'importlib', 77 'inspect', 78 'interactive', 79 'is_interactive', 80 'is_url', 81 'locale', 82 'logging', 83 'matplotlib_fname', 84 'mplDeprecation', 85 'namedtuple', 86 'numpy', 87 'os', 88 'pprint', 89 'rc', 90 'rcParams', 91 'rcParamsDefault', 92 'rcParamsOrig', 93 'rc_context', 94 'rc_file', 95 'rc_file_defaults', 96 'rc_params', 97 'rc_params_from_file', 98 'rcdefaults', 99 'rcsetup', 100 're', 101 'sanitize_sequence', 102 'set_loglevel', 103 'shutil', 104 'subprocess', 105 'sys', 106 'tempfile', 107 'test', 108 'tk_window_focus', 109 'use', 110 'validate_backend']

とするとここにpyplotはありません。上に書いたようにmatplotlibpyplotという名前の属性を持っていないからです。

しかし、importの作用として
https://docs.python.org/ja/3/reference/import.html#submodules

サブモジュールをロードするのにどのようなメカニズム (例えば、 importlib API 、 import または import-from ステートメント、またはビルトイン関数の import) が使われた場合でも、バインディングはサブモジュールオブジェクトを親モジュールの名前空間に配置します

(強調は私)

とあります。ということは、matplotlib.pyplotをロードした時にmatplotlibの属性として追加されることを意味します。

plain

1>>> from matplotlib import pyplot 2 3>>> pprint(dir(matplotlib)) 4['LooseVersion', 5 'MatplotlibDeprecationWarning', 6 'MutableMapping', 7 'Parameter', 8 'Path', 9 'RcParams', 10 'URL_REGEX', 11 '_DATA_DOC_APPENDIX', 12 '_DATA_DOC_TITLE', 13 '_ExecInfo', 14 '__bibtex__', 15 '__builtins__', 16 '__cached__', 17 '__doc__', 18 '__file__', 19 '__loader__', 20 '__name__', 21 '__package__', 22 '__path__', 23 '__spec__', 24 '__version__', 25 '_add_data_doc', 26 '_all_deprecated', 27 '_check_versions', 28 '_cm', 29 '_cm_listed', 30 '_color_data', 31 '_constrained_layout', 32 '_create_tmp_config_or_cache_dir', 33 '_deprecated_ignore_map', 34 '_deprecated_map', 35 '_deprecated_remain_as_none', 36 '_ensure_handler', 37 '_error_details_fmt', 38 '_get_config_or_cache_dir', 39 '_get_data_path', 40 '_get_executable_info', 41 '_get_xdg_cache_dir', 42 '_get_xdg_config_dir', 43 '_image', 44 '_init_tests', 45 '_label_from_arg', 46 '_layoutbox', 47 '_log', 48 '_logged_cached', 49 '_mathtext_data', 50 '_open_file_or_url', 51 '_path', 52 '_preprocess_data', 53 '_pylab_helpers', 54 '_rc_params_in_file', 55 '_replacer', 56 '_version', 57 'afm', 58 'artist', 59 'atexit', 60 'axes', 61 'axis', 62 'backend_bases', 63 'backend_tools', 64 'backends', 65 'bezier', 66 'blocking_input', 67 'category', 68 'cbook', 69 'checkdep_dvipng', 70 'checkdep_ghostscript', 71 'checkdep_inkscape', 72 'checkdep_pdftops', 73 'checkdep_ps_distiller', 74 'checkdep_usetex', 75 'cm', 76 'collections', 77 'colorbar', 78 'colors', 79 'compare_versions', 80 'container', 81 'contextlib', 82 'contour', 83 'cycler', 84 'dates', 85 'dedent', 86 'defaultParams', 87 'default_test_modules', 88 'docstring', 89 'dviread', 90 'figure', 91 'font_manager', 92 'fontconfig_pattern', 93 'ft2font', 94 'functools', 95 'get_backend', 96 'get_cachedir', 97 'get_configdir', 98 'get_data_path', 99 'get_home', 100 'get_label', 101 'get_py2exe_datafiles', 102 'gridspec', 103 'image', 104 'importlib', 105 'inspect', 106 'interactive', 107 'is_interactive', 108 'is_url', 109 'legend', 110 'legend_handler', 111 'lines', 112 'locale', 113 'logging', 114 'markers', 115 'mathtext', 116 'matplotlib_fname', 117 'mlab', 118 'mplDeprecation', 119 'namedtuple', 120 'numpy', 121 'offsetbox', 122 'os', 123 'patches', 124 'path', 125 'pprint', 126 'projections', 127 'pyplot', 128 'quiver', 129 'rc', 130 'rcParams', 131 'rcParamsDefault', 132 'rcParamsOrig', 133 'rc_context', 134 'rc_file', 135 'rc_file_defaults', 136 'rc_params', 137 'rc_params_from_file', 138 'rcdefaults', 139 'rcsetup', 140 're', 141 'sanitize_sequence', 142 'scale', 143 'set_loglevel', 144 'shutil', 145 'spines', 146 'stackplot', 147 'streamplot', 148 'style', 149 'subprocess', 150 'sys', 151 'table', 152 'tempfile', 153 'test', 154 'texmanager', 155 'text', 156 'textpath', 157 'ticker', 158 'tight_bbox', 159 'tight_layout', 160 'tk_window_focus', 161 'transforms', 162 'tri', 163 'units', 164 'use', 165 'validate_backend', 166 'widgets']

となり、確かにpyplotがここにあります。

したがって正しい回答は
モジュールmatplotlibpyplotという名前の属性を持っていない
けれども
モジュールmatplotlib.pyplotロードした時に、「完全修飾名matplotlib.pyplotを持つモジュール」が、モジュールmatplotlibpyplotという属性で束縛される
ということになります。

投稿2020/03/07 03:36

編集2020/03/07 04:13
quickquip

総合スコア11235

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

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

okahijiki

2020/03/07 03:39

ご回答ありがとうございまーす。dir()関数は属性を一覧する関数で、matplotlibはpyplotという属性を持っていない。一方のpyplotはメソッドと、とらえて良いでしょうか。
quickquip

2020/03/07 03:52 編集

モジュールオブジェクトの場合、dir関数はモジュールの属性名を取り出します。(質問するよりdir関数のドキュメントを読んだ方が早いのでは?) type(pyplot) とすれば分かりますが、pyplot は(matplotlib.pyplot という完全修飾名の)モジュールです。 メソッドと呼ぶのは、インスタンスが持つメソッド形式で呼び出し可能な属性に対してだけです。 matplotlibはパッケージ(ということはモジュール)で、pyplotもモジュールなので、メソッドとは呼びません。
quickquip

2020/03/07 03:57

のちほど回答を修正します。
okahijiki

2020/03/07 03:59

お手数をおかけしております。ぼんやりと理解できております。言葉で説明できるように、さらに学習してまいります。ありがとうございました。
okahijiki

2020/03/07 08:13

コメント、ありがとうございます。pyplotという名の属性は持たないが、pyplotという(名前を持たない)属性で束縛される、という感じでしょうか。
quickquip

2020/03/07 08:24

matplotlib自身には定義されていない属性 import matplotlib.pyplot した時にできる属性 ということですね。 「属性」の定義は「ドット表記を使って名前で参照する値」なので、「名前を持たない属性」は定義上ありえません。
quickquip

2020/03/07 08:38 編集

「回答に誤認が合った」というのは、そのあたりで勘違い回答をしてしまった、という意味でした。
okahijiki

2020/03/07 08:45

ご回答いただき、3、4時間ほど、ググって調べて参りましたが、現状の、当方の知識不足ゆえ、暗闇の中の森にさまよってしまいました。どうぞ、あとは宿題とさせて下さいませ。お手数をおかけしました。ありがとうございます。
quickquip

2020/03/07 09:36

**Pythonにおいて**用語がどういう意味か、という問題をググっても仕方がなくて、公式ドキュメントを隅から隅まで読んだ方がずっといいです。 12:52の私のコメントがまさにそうですけれども、うっかりだったり知らなかったりで、間違った説明は山とあるわけですから。 (世間一般で適当な用語の使い方をしている人がどんなにたくさんいるとしても、こういうサイトで回答をするからには、公式ドキュメントに書かれている用法と異なるような使い方はしたくないと思っているわけです)
0kcal

2020/03/07 12:03

お疲れ様です。 質問された方が理解しにくいのも無理がない気がします。 matplotlibみたいな大きいのは、いろいろなことがあるのでは? 基本、モジュールと呼べるけど、パッケージに相当するものでは、いろんなことがある気がします。 ワタクシもよくわかっていませんが。help(matplotlib)とかも併用するしかないのではと思います。
okahijiki

2020/03/07 12:31

コメント、ありがとうございます〜 言葉にこだわってしまうのも、職業柄(執筆業の性)故からかも知れません〜。ほんらいプログラミングはプログラミングで読んでいく、という感じだったりするのかも知れません。そういうニュアンスも含めて、気づきがありました。ありがとうございます〜
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問