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

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

ただいまの
回答率

87.37%

結果が出力されない

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 4,531
退会済みユーザー

退会済みユーザー

結果が出力されないです。

import matplotlib.pyplot as plt
import networkx as nx

G=nx.MultiDiGraph()
G.add_edges_from([('A','B'),('A','C'),('A','A'),('B','B'),('C','C')])
T = nx.DiGraph()
for t in range(4):
    T.add_edge(t,t+1)
TimeSpace = nx.tensor_product(G,T)
nx.draw(TimeSpace)
plt.draw()


と書いて実行すると

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/collections.py:608: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  if self._edgecolors_original != 'face':


とwarningが出ました。

python test4.py -w


と( test4.pyはこのファイル名)実行したのですが実行したのですが同じエラー

/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/matplotlib/collections.py:608: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  if self._edgecolors_original != 'face':


が出ました。
どうしたらいいでしょうか?

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • can110

    2017/05/05 15:29

    コードが何をしようとしているのか日本語で説明+欲しい描画イメージ(画像)を追記すると回答得られやすいと思います。

    キャンセル

  • can110

    2017/05/05 18:55

    質問文中の「同じエラー」(warningと異なる)が不明なので明示すると回答得られやすいと思います。

    キャンセル

  • 退会済みユーザー

    2017/05/07 00:43

    複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
    「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。

回答 3

+3

私(回答者)に対する失礼なコメントに、私が気分を害し、私が「私は能無し故に適切な回答を準備することができないわけではない」旨を表するために回答をもう一つ追加します。「人により良い回答を求めたからには自分も改めてより良い回答を準備するのがスジ」という考えもありましたが、よくよく考えるとそれは2番目以降の理由でした。

コードの修正点1つ目

コードではpltを使おうとしているので、事前にmatplotlib.pyplotを以下のようにインポートする必要があります。

import matplotlib.pyplot as plt

コードの修正点2つ目

プログラミングで何か画面に表示を出したいときには通常、描画(draw)と表示(show)を行います。

matplotlibはグラフを描画・表示するのに便利なライブラリです。また、networkxはグラフデータの扱いに特化したライブラリでmatplotlibへの描画も行えます。

上記を踏まえると、グラフデータを画面に出したいときにはnetworkxで描画(draw)してmatplotlibで表示(show)するという2ステップが(通常は)必要です。

よってコードの基本形は以下のようになります。

# 前提1:Gはグラフデータ
# 前提2:nxはnetworkx
# 前提3:pltはmatplotlib.pyplot

nx.draw(G)  # ステップ1:描画
plt.show()  # ステップ2:表示

なので最後はplt.draw()ではなくplt.show()です。これでグラフが表示されるようになるはずです。

コードの実行方法の修正

pythonコマンドの-Wオプションの使い方を間違えています。以下のようにスクリプトの後ろにオプションを置くとスクリプトへオプションが渡されてしまいます。

python test4.py -w

pythonコマンドのヘルプを--helpで見てみると、

C:\Users\YouheiSakurai>python --help
usage: python [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options and arguments (and corresponding environment variables):
(中略)
-W arg : warning control; arg is action:message:category:module:lineno
         also PYTHONWARNINGS=arg

と表示され、オプションはpythonコマンドのすぐ後ろに置く、また-Wオプション(小文字ではなく大文字のW)はなにがしかのargを指定する必要があることがわかります。

このargに指定できる値の一覧は、https://docs.python.jp/3/using/cmdline.html#cmdoption-Wにあります。私がこのページにたどり着くために使った検索キーワードは「python w option」です。

よって、発せられるすべての警告を無視(非表示に)するには、

python -W ignore test4.py

とします。

修正後のtest4.pyとその実行方法

import networkx as nx
import matplotlib.pyplot as plt

G=nx.MultiDiGraph()
G.add_edges_from([('A','B'),('A','C'),('A','A'),('B','B'),('C','C')])
T = nx.DiGraph()
for t in range(4):
    T.add_edge(t,t+1)
TimeSpace = nx.tensor_product(G,T)

nx.draw(TimeSpace)
plt.show()
python -W ignore test4.py

Pythonでコードをいろいろと試すにあたって知っておいたほうが良いこと

Pythonにおけるwarningの規定の動作は、実行中の処理を中断せずに警告メッセージを表示するだけなので、処理が止まってしまうexception(エラー・例外)とこのwarning(注意・警告)は別物です。

自分のコードがうまく動かないときに出てきたメッセージが、exception(エラー・例外)とwarning(注意・警告)のどちらかなのかを正しく判別するようにすれば、そのメッセージが原因でコードが動いていないのか、それとも何か別の原因があるのかが判別できるようになります。

もう少し高次の段階まで進めばwarning(注意・警告)を解決しないと、自分の意図する結果が得られないこともありえますが、今の段階ではまれだと思います。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/06 14:53

    詳細に回答してくださりありがとうございました。とても勉強になりました。

    キャンセル

  • 2017/05/06 17:25

    なぜわざわざ別回答にしたのでしょうか?
    今後、この質問の回答を他人が参照しようとした場合
    修正前のBA付いた回答が参照され、この回答は埋もれますよ。
    このような質問と回答の流れは第三者にとって分かりにくいとお考えになりませんか?
    質問者がこちらをBAに変更すれば、まだよいですが。

    「私は能無し~」旨を表するために、というのも技術的な問答とは無関係なので
    個人的なブログなりに書かれてはいかがでしょうか?
    また、具体的に不快な発言があるなら運営者に通報なりすべきかと思います。

    キャンセル

  • 2017/05/06 21:03

    ・お考えになりませんか? -> 考えても良いですけど今回第三者へのわかりやすさに気を配る動機は私にはありません。
    ・いかがでしょうか? -> そう考える人がいるという事は勉強になりました。しかし私は特に必要性を感じていません。
    ・思います。 -> 意見の相違ですね。私は特に思いません。(正直、若干は思いますが言われた通りに従うのはシャクなので思いたくありません。)

    ポイントが分かってらっしゃらないようのなで補足すると私の行動は回答を含めて全て私都合の産物です。一方、貴殿の求めている事は貴殿以外のところをその理由のよりしろとしています(しているように感じます)。個人が他者に対して否定的に振る舞う際に、自身以外の事柄を盾にとる(理由にする)姿勢を私は「失礼」と申しています。一文で表現すると「言われる筋合いはない」と脊髄反射している次第です。現時点で私は貴殿の意見を求めていませんし、貴殿を師や同僚、友だとも認識していません。言い方の問題ですが「質問と回答を読んでなぜこの回答に至ったのか全く分かりませんでした。このQAサイトを後から参照した人たちにも分かりやすい情報が載っているというサイトに育てたいと思っています。つきましてはこの回答を他の人達にも分かりやすい状態に近づけるために幾つかの提案します。提案1)〜、提案2)〜、提案3)〜。提案事項に理解を示していただければ嬉しく思います。」等々が失礼にあたらない、むしろ好ましい指摘だと考えます。これが当事者である質問者からの「分かりにくい」という指摘であればこんな礼儀はいりません、分かりたい人が分かりにくい説明に分かりにくいと言う事は当然の権利行使です。

    あーぁ、ネットで釣られるってこういう事をいうんだろうなぁ、スルーできる大人力をやしないたいなぁと本心から思います。

    キャンセル

  • 2017/05/07 00:33 編集

    なんだか「誰のどの文言が失礼なのか」を明示されず(名指しも文言の特定もせず)失礼と決めつけて話を進めているのはよく分かりませんが、この問答には関係ないですし、技術的な回答部分を埋もれさせるのはもったいないので私も+評価しておきますね。
    質問者がBA変えれば済むことですが。

    キャンセル

+1

現在挙げているソースコードを実行してみました。

私の環境では

plt.draw() の部分を plt.show() に修正することで問題なくネットワークが描写されております。(Warningは出力されておりません)

Warningが出る問題ですが、もしかしたらこちら に記述なある不具合なのではないでしょうか。

mataplotlibを最新版にアップグレードしてみてはいかがでしょうか。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/05 22:21

    横から失礼します。matplotlib 2.0.1ですが何も描画されません。

    キャンセル

  • 2017/05/05 22:30

    ん?
    再度確認しました。
    plt.draw() -> plt.show() ですね。
    回答を編集しておきます。

    キャンセル

  • 2017/05/05 22:40

    コメントありがとうございます。
    編集された回答にしたがい何等かの描画がされました。
    回答者の求める結果と一致しているかは不明ですが。

    キャンセル

checkベストアンサー

0

https://networkx.github.io/documentation/development/reference/generated/networkx.drawing.nx_pylab.draw.html#networkx.drawing.nx_pylab.draw

Exampleにある通りにnx.draw()で描画してからshow()しないと何も描画されていないものが表示されます。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2017/05/06 11:39

    先のコメントにて指摘させて頂いたのですが、具体的にどのようにコードを修正すればよいかが(少なくとも私には)分かりませんでしたのでコメントさせていただきました。
    なお、質問への追記・修正依頼欄に記載している部分が不明なので私にはどのような回答をしてよいかは分かりません。

    キャンセル

  • 2017/05/06 12:39

    そういう状況であれば貴殿は「私にはわかりにくい内容です。」と自身の意見を述べるべきだったと思います。否定的な事を書くのに質問者を引き合いに出すのは失礼だと感じた次第です。ただし私が指導を受ける場合にはその限りではないのでより良い回答の提示を求めました。お互いの意見を述べ終わったので以上でオフトピックは終わりにしましょう。

    キャンセル

  • 2017/05/06 13:01

    「質問者に対して失礼」ということですね。この点についてはオフトピックであると感じますので了解しました。また私が回答しない理由もすでに述べていますので、これで終わりにしたいと思います。
    ただ、あなたの回答に対して、質問者から最初のコメントにて「うまくいかない」と指摘があり、私のような第三者からも「分からない」と指摘されています。これについては何のコメントもいただいておりませんが、何らかの返答をすべき、または、よりよい回答となるよう修正すべきと思います。
    なお、これについての追加のコメントは不要です。
    お互いよりよい質問、回答をしたいという姿勢は同じと思いますので。
    お付き合いありがとうございました。

    キャンセル

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

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

関連した質問

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