質問: colors.to_rgba(color) AttributeError: 'module' object has no attribute 'to_rgba'
回答: 自分の環境(Windows 10 + Anaconda 2.7)では質問者さんのコードとほぼ同じもの(h5py, numpy, matplotlibを使ったもの)が動作したので参考までに自分の環境についてコメントしてみます。 なお、ご質問には**事実の記載が少ない**と感じました。なんでもかんでもたくさん情報があればよいわけではありませんが、閲覧者には質問者さんがどんな環境で何をどうやったのか正確にわからないのですから、例えばmatplotlibのバージョンが古い可能性があるかも知れないと思ったなら実際のバージョンを明記しておくべきだと思います。「どの事実を明記すべきか」についてもう少し配慮できたら・・・といったところではないでしょうか。以下の自分の記述は逆に冗長すぎると思いますが何かのヒントになればと思いあえてそうしています。 Anacondaインストール前の環境 WindowsにはCPython 3.7がインストールしてあります。こちらは普段使いなのでPATHにもつなげてます。 Anacondaインストール から最新の5.3.1 Python 2.7 VersionをDLしてインストールしました。 (A)Just Meを選択 (B)インストール先はC:\Users\ksoh\Anaconda2 (C)Add Anaconda to my PATH environment variable =>チェックしない (D)Register Anaconda as my default Python 3.7 =>チェックしない (C)はAnacondaのuninstall/reinstallで問題を引き起こす可能性があるので推奨しないとのことですが、「なんで?」と思ったものの、自分は普段CPythonを使うためあまり気にしないことにしました。また同じ理由でAnaconda環境はAnaconda Prompt/Notebook/Spiderを通じて利用し、PyCharmなどはあえて使わないと決めたので(D)のチェックも外しました。 インストール後の環境 (E) matplotlibバージョン Anaconda NavigatorのEnvironmentで見るとmatplotlibバージョンは2.2.3でした。 `import matplotlib.colors as colors;print hasattr(colors, "to_rgba")`はTrueです。(動いたんだから当然といえますが) (F) 環境変数PATH Start MenuからNotebook起動 Start MenuからAnaconda Promptを起動しそこからipythonを動かす このパターンで環境変数PATHを`for p in os.environ['PATH'].split(';'): print p`で調べると C:\Users\ksoh\Anaconda2 C:\Program Files\Python37 <= 最初から入っていたCPython 3.7 の順(期待通り)になってました。一方念のためStart MenuからPowerShellを起動し`$env:path.split(";")`を見るとAnacondaがPATHに含まれてません(期待通り)でした。 (G) matprotlibrc 自分はこれを作成していません。よって C:\Users\ksoh\.matplotlib にもプログラムを動かしている作業ディレクトリーにも matplotlibrcが存在しない前提で確認しました。 問題のプログラムの実行 スタックトレースを拝見するとmatplotlibのバックエンドがinline表示用(`module://ipykernel.pylab.backend_inline`)のようでしたので、 Start MenuからNotebook起動 Anaconda NavigatorからQtConsoleを起動 の2パターンでまず以下をやってみました。(IPythonのプロンプトは省略してます) ``` import matplotlib.pyplot as plt plt.plot([1, 3, 2]) # => [] # (QtConsoleではこの時点でグラフがインライン表示された) plt.show() # (Notebookではセルにここまで書いて初めてインライン表示された) import matplotlib as mpl print mpl.get_backend() # => module://ipykernel.pylab.backend_inline # inline用のバックエンドになってました ``` Notebookの記事を見ますと`%matplotlib inline`なんて指定しているのを見かけますがAnacondaからNotebookやQtConsoleを起動する限りはこのようなバックエンドの指示は不要のようです。 一方、Anaconda Promptから上記の内容のPythonスクリプトtest.pyを次のようにpythonで実行すると ``` (base) C:\User\ksoh>python test.py Qt5Agg ``` バックエンドはinline用ではなくQt5Aggとなり、Anaconda Promptとは別のウィンドウが出てそこにグラフが表示されます。 ちょっと疑問 Anacondaでinline用の表示をするにもかかわらずフロントエンドがipythonでない(それはスタックトレースの形式からわかります)という質問者さんの状況がよくわかりませんでした。 具体的にどのようにプログラムを起動しておられるのでしょうか?そのあたりも明記するとよいと思います。 基本的な環境情報のいくつかを調べる簡単なスクリプトを書いてみました。 あれみてこれみて・・・と調べるより、このスクリプトを「どういう手順で起動したか」「実行した結果」をそのまま記載した方が質問側・閲覧側に情報伝達の祖語がおきにくいかも知れません。 ``` # python 2.7 について import os, sys print 'sys.executable:', sys.executable print '%PATH%:' for p in os.environ['PATH'].split(';'): print " '%s'" % p print 'sys.path:' for p in sys.path: print " '%s'" % p # matplotlibについて import matplotlib as mpl print 'matplotlib: ', mpl.__version__ print 'backend: ', mpl.get_backend() # numpy, h5py import numpy print 'numpy: ', numpy.__version__ import h5py print 'h5py: ', h5py.__version__ ```