2016-07-29 16 views
0

Ich habe ein Code-Snippet, das gut mit Python 3 funktioniert, aber nicht mit Python 2. Ich versuche RGB-Codes zu verwenden, um eine Farbpalette zu definieren: Ich bekomme das Recht Farben mit Python 3, aber Python 2 zeigen ihnen alle schwarz ...Matplotlib: RGB Farben erscheinen schwarz mit Python 2

Im Folgenden ist ein sehr einfacher Code-Schnipsel, die dieses seltsame Verhalten zeigt:

%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

Ist das ein Bug oder matplotlib Farben RGB Handhabung eine andere Art und Weise absichtlich? Wie sollte ich meinen Code anpassen?

Software | Version Python | 2.7.11 64bit
IPython | 4.0.3
OS | Windows 7 6.1.7601 SP1
matplotlib | 1.5.1

+5

Python 2 und 3 unterscheiden sich in Bezug auf die Division Operator. Ist es möglich, dass deine Integer-Division zuständig ist -> 234/255 = 0 – sascha

Antwort

1

Problem tritt in dieser Zeile:

i/255 for i in colors[col] 

Es ist, weil ganzzahlige Division ist unterschiedlich in Python 2 und Python 3.

Python 2

>>> 2/3 
>>> 0 

Python 3

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

Um t zu bekommen er gleiches Verhalten in Python 2 können Sie verwenden:

from __future__ import division 
+0

war ich schneller :-). Aber gute Antwort! Sie könnten auch den Operator // in Ihre Antwort einfügen. – sascha

+0

Aaaaah natürlich :) Danke! – jodoox

1

Es sieht aus wie Sie nie 3. Kurz verschiedenes Verhalten der Teilung in Python 2 und Python gehörten - fügen Sie diese an die Spitze Ihres Python-Code - from __future__ import division. Python 2 wird sein unwahrscheinliches Verhalten korrigieren, und Python 3 ignoriert diese Aussage einfach - es ist bereits behoben.

Verwandte Themen