2016-08-19 1 views
0

Bitte seien Sie nicht zu hart. Könnte mir jemand erklären, warum die Farben der Balken in diesen beiden Plots so unterschiedlich sind?Breite der Balkenplotbreite

import numpy as np 
import datetime as dt 
import matplotlib.pyplot as plt 
from matplotlib import rcParams 

rcParams.update({'figure.autolayout': True}) 
plt.style.use('ggplot') 

def plot3(): 
    bal=np.cumsum(ret) 
    ind = np.arange(len(ret)) 
    fig, ax = plt.subplots() 
    barlist=ax.bar(ind,ret,label="Return") 
    ax.plot(ind,bal,color='b',label="Balance") 
    for i in ind: 
     if ret[i]>=0: 
      barlist[i].set_color('g') 
     else: 
      barlist[i].set_color('r') 
    ax.legend(loc='best',frameon=False) 
    plt.show() 

def plot3b(): 
    bal=np.cumsum(ret) 
    ind = np.arange(len(ret)) 
    fig, ax = plt.subplots() 
    colors=['g' if r>=0 else 'r' for r in ret] 
    ax.bar(ind,ret,color=colors,label="Return") 
    ax.plot(ind,bal,color='b',label="balance") 
    ax.legend(loc='best',frameon=False) 
    plt.show() 

In meinem Laptop gegeben

n=100 
ret=np.random.randn(n) 
ret=np.insert(ret,0,0) 

die Plots sind jeweils

plot3

und

plot3b

Antwort

0

Bars haben sowohl facecolor als auch edgecolor, siehe Dok. here.

Es scheint, dass set_color() Sets beide Rand und Gesicht Farbe des Balkens, so in Ihrem ersten Diagramm die Balken breiter sind, dass in der zweiten, wo die Kantenfarbe nicht eingestellt worden

hat Wenn Sie ändern:
ax.bar(ind,ret,color=colors,label="Return")

An:
ax.bar(ind,ret,color = colors, edgecolor = colors, label="Return")

... dann sind beide Parzellen gleich:

plot3() enter image description here

plot3b() enter image description here

entschuldigen Sie bitte die unterschiedlichen Schreibweisen der Farbe/Farbe in diesem Beitrag. Ich bin in Großbritannien, und es fühlt sich einfach falsch an, Farbe ohne das "u" zu buchstabieren, also habe ich es richtig geschrieben, wenn ich nicht auf ein Funktionsargument referenziere.

* Das ist Humor, BTW. Also starte bitte keinen Amerikanisch/Britischen Englisch Krieg.