2016-07-29 12 views
0

Python 3では正常に動作するが、Python 2では動作しないコードスニペットがあります。 RGBコードを使用してカラーパレットを定義しようとしています。 Pythonの3が、Pythonの2との色は黒、それらすべてを表示...Matplotlib:Python 2でRGBの色が黒く表示される

以下

は、この奇妙な挙動を示し、非常に簡単なコードスニペットです:

%matplotlib inline 
import pandas as pd 
import matplotlib.pylab as plt 
import numpy as np 

colors = { 
    'A': (234, 142, 142), 
    'B': (255, 224, 137), 
    'C': (189, 235, 165)} 

df = pd.DataFrame(np.random.randn(20, 3), columns=list('ABC')).cumsum() 

fig, ax = plt.subplots() 
for col in df.columns: 
    ax.plot(df.index.tolist(), df[col].values, color=(tuple(i/255 for i in colors[col]))) 
plt.show() 

のPython 2

Using Python2

のPython 3(OK)

Using Python3

バグやmatplotlibのが目的で異なる方法で、RGB各色を扱うことですか?コードをどのように適応させるべきですか?

ソフトウェア|バージョン Python | 2.7.11 64bit
IPython | 4.0.3
OS | Windows 7 6.1.7601 SP1
matplotlib | 1.5.1

+5

Python 2と3は除算演算子が異なります。あなたの整数部が責任を負うことは可能ですか?> 234/255 = 0 – sascha

答えて

1

問題は、この行で発生する整数の除算は、Python 2とPythonで異なるため

i/255 for i in colors[col] 

にです3

パイソン2

>>> 2/3 
>>> 0 

パイソン3

>>> 2/3 
>>> 0.66... 

あなたが使用することができ、彼のPython 2で同じ動作、:

from __future__ import division 
+0

私はより速いです:-)。しかし、良い答え!答えに//演算子を導入することもできます。 – sascha

+0

もちろんAaaaah :) ありがとう! – jodoox

1

あなたはまもなくのpython 2とPython 3で除算の異なる振る舞いを聞いたことがないように見えます - from __future__ import division - あなたのPythonコードの先頭にこれを追加します。 Python 2はそれを自明ではない振る舞いに修正し、Python 3はこの文を無視します。すでに修正されています。

関連する問題