2017-10-18 20 views
6

Mam ten kod dla mojego wykresu słupkowego.Wykres słupkowy Matplotlib nie rysujący obramowań/krawędzi

ax1 = plt.subplot2grid((1,1),(0,0)) 
ax1.bar(edges2, Nnorm, width=0.02, edgecolor='green', linewidth=20) 

Pomyślałem, że powinno to sprawić, że mój wykres słupkowy będzie miał zielone krawędzie. Ale tak nie jest. Sprawia, że ​​jeden pasek po lewej stronie jest zielony. Co ja robię źle? Facecolor działa.

enter image description here

Odpowiedz

4

Niestety this is a bug in matplotlib 2.1. Powinien zostać naprawiony w następnym wydaniu.

Jak teraz obejście jest ustawienie edgecolor i szerokości linii dla każdego pręta indywidualnie:

import matplotlib.pyplot as plt 

bars = plt.bar(range(4), [3,4,1,5]) 
for bar in bars: 
    bar.set_edgecolor("green") 
    bar.set_linewidth(20) 

plt.show() 

enter image description here

+0

Idealna. Niefortunny błąd, ale ta praca działa świetnie. Dzięki! Będę mieć oko na aktualizację. – Nertskull

1

Jak już wyjaśniono to matplotlib bug. Jednak jest to tylko brak transmisji z edgecolor, więc tutaj jest bardziej zwarta obejście:

plt.bar(x, y, linewidth=20, edgecolor=['g']*len(x)) 
1

Innym rozwiązaniem jest przekazanie parametru alpha:

plt.bar(range(4), [3,4,1,5], alpha=1, edgecolor='k', linewidth=20) 

UWAGA: ta działa tylko wtedy, gdy ustawienie edgecolor jest czarne, w przeciwnym razie pierwsza kolumna będzie miała poprawne kolory edgecolor, a reszta będzie czarna

Powiązane problemy