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

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

ただいまの
回答率

88.63%

AttributeError: 'module' object has no attribute 'to_rgba'と表示される

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 3,496

aine_

score 22

環境はpython2.7.15でwindows10です。
まわしたコードは

import h5py
import numpy as np
import matplotlib.pyplot as plt


max = []
for i in range (0,22700,100):
    list =[]
    hdf5 = h5py.File("file_%d.hdf5"%(i), 'r')
    list.append(hdf5["element"].value)
    max.append(np.amax(list))

plt.plot(max)
plt.show()


で、hdf5のファイルの各々の最大値をグラフ化するというものです。
コード自体には問題はないと思います。
ググった際にmatplotlibをアップグレードすればなおるというページもありましたが、matplotlibをアップグレードしても同様のエラーがでてしまいます。

コード自体に問題ないという根拠は、以前はこのコードで回っていたことがあるからです。
アプリケーションをいれるためにanacondaを一度消して再インストールしたのですが、それ以後このエラーがでるようになってしまいました。
ちなみにanacondaも2.7です。

エラー全文は以下の通りです
Traceback (most recent call last):

File "C:\Users\user\Anaconda2\lib\site-packages\ipykernel\pylab\backend_inline.py", line 39, in show
metadata=_fetch_figure_metadata(figure_manager.canvas.figure)

File "C:\Users\user\Anaconda2\lib\site-packages\ipykernel\pylab\backend_inline.py", line 174, in _fetch_figure_metadata
if _is_transparent(fig.get_facecolor()):

File "C:\Users\user\Anaconda2\lib\site-packages\ipykernel\pylab\backend_inline.py", line 195, in _is_transparent
rgba = colors.to_rgba(color)

AttributeError: 'module' object has no attribute 'to_rgba'

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

自分の環境(Windows 10 + Anaconda 2.7)では質問者さんのコードとほぼ同じもの(h5py, numpy, matplotlibを使ったもの)が動作したので参考までに自分の環境についてコメントしてみます。

なお、ご質問には事実の記載が少ないと感じました。なんでもかんでもたくさん情報があればよいわけではありませんが、閲覧者には質問者さんがどんな環境で何をどうやったのか正確にわからないのですから、例えばmatplotlibのバージョンが古い可能性があるかも知れないと思ったなら実際のバージョンを明記しておくべきだと思います。「どの事実を明記すべきか」についてもう少し配慮できたら・・・といったところではないでしょうか。以下の自分の記述は逆に冗長すぎると思いますが何かのヒントになればと思いあえてそうしています。

 Anacondaインストール前の環境

WindowsにはCPython 3.7がインストールしてあります。こちらは普段使いなのでPATHにもつなげてます。

 Anacondaインストール

https://www.anaconda.com/download/から最新の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])  # => [<matplotlib.lines.Line2D at 0x7ba4978>]
# (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__

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/26 13:20

    ありがとうございます。今回はanacondaを入れなおしたらなおりました。
    事実の記載事項について、今後気を付けていきたいです。懇切丁寧にありがとうございます。

    キャンセル

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

  • ただいまの回答率 88.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る