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

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

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

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

Q&A

解決済

3回答

6001閲覧

結果が出力されない

退会済みユーザー

退会済みユーザー

総合スコア0

Python

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

0グッド

1クリップ

投稿2017/05/05 02:51

編集2017/05/05 11:46

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

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':

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

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

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

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

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

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

can110

2017/05/05 06:29

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

2017/05/05 09:55

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

回答3

0

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

コードの修正点1つ目

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

python

1import matplotlib.pyplot as plt

コードの修正点2つ目

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

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

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

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

python

1# 前提1:Gはグラフデータ 2# 前提2:nxはnetworkx 3# 前提3:pltはmatplotlib.pyplot 4 5nx.draw(G) # ステップ1:描画 6plt.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 05:26

YouheiSakurai

総合スコア6142

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

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

退会済みユーザー

退会済みユーザー

2017/05/06 05:53

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

2017/05/06 08:25

なぜわざわざ別回答にしたのでしょうか? 今後、この質問の回答を他人が参照しようとした場合 修正前のBA付いた回答が参照され、この回答は埋もれますよ。 このような質問と回答の流れは第三者にとって分かりにくいとお考えになりませんか? 質問者がこちらをBAに変更すれば、まだよいですが。 「私は能無し~」旨を表するために、というのも技術的な問答とは無関係なので 個人的なブログなりに書かれてはいかがでしょうか? また、具体的に不快な発言があるなら運営者に通報なりすべきかと思います。
YouheiSakurai

2017/05/06 12:03

・お考えになりませんか? -> 考えても良いですけど今回第三者へのわかりやすさに気を配る動機は私にはありません。 ・いかがでしょうか? -> そう考える人がいるという事は勉強になりました。しかし私は特に必要性を感じていません。 ・思います。 -> 意見の相違ですね。私は特に思いません。(正直、若干は思いますが言われた通りに従うのはシャクなので思いたくありません。) ポイントが分かってらっしゃらないようのなで補足すると私の行動は回答を含めて全て私都合の産物です。一方、貴殿の求めている事は貴殿以外のところをその理由のよりしろとしています(しているように感じます)。個人が他者に対して否定的に振る舞う際に、自身以外の事柄を盾にとる(理由にする)姿勢を私は「失礼」と申しています。一文で表現すると「言われる筋合いはない」と脊髄反射している次第です。現時点で私は貴殿の意見を求めていませんし、貴殿を師や同僚、友だとも認識していません。言い方の問題ですが「質問と回答を読んでなぜこの回答に至ったのか全く分かりませんでした。このQAサイトを後から参照した人たちにも分かりやすい情報が載っているというサイトに育てたいと思っています。つきましてはこの回答を他の人達にも分かりやすい状態に近づけるために幾つかの提案します。提案1)〜、提案2)〜、提案3)〜。提案事項に理解を示していただければ嬉しく思います。」等々が失礼にあたらない、むしろ好ましい指摘だと考えます。これが当事者である質問者からの「分かりにくい」という指摘であればこんな礼儀はいりません、分かりたい人が分かりにくい説明に分かりにくいと言う事は当然の権利行使です。 あーぁ、ネットで釣られるってこういう事をいうんだろうなぁ、スルーできる大人力をやしないたいなぁと本心から思います。
can110

2017/05/06 15:44 編集

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

0

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

私の環境では

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

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

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

投稿2017/05/05 12:43

編集2017/05/05 13:33
magichan

総合スコア15898

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

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

can110

2017/05/05 13:21

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

2017/05/05 13:30

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

2017/05/05 13:40

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

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/05 08:27

編集2017/05/05 08:28
YouheiSakurai

総合スコア6142

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

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

退会済みユーザー

退会済みユーザー

2017/05/05 08:54

ありがとうございます。編集したようにコードを書き換えたのですが、うまくいきません。もし原因がお分かりでしたらお願いいたします。
can110

2017/05/05 13:27

横から失礼します。提示されたページには「nx.draw()」も「show()」も記載されていません。もう少し具体的な回答をされないと質問者には分からないと思われます。
YouheiSakurai

2017/05/06 02:09

失礼です。より良い回答を提示してから指摘してください。
can110

2017/05/06 02:39

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

2017/05/06 03:39

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

2017/05/06 04:01

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問