2015-02-08 7 views
12

Planuję histogram, a mam trzy zestawy danych, które chcę wydrukować razem, każdy z różnymi kolorami i rodzajem linii (przerywana, kropkowana, itp.). Daje również trochę przejrzystości, aby zobaczyć nakładające się paski.Matplotlib: wykreślanie przezroczystego histogramu z nieprzezroczystą krawędzią

Chodzi o to, że chciałbym, aby krawędź każdego paska nie stała się przezroczysta, tak jak wewnętrzna część. Oto przykład:

import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.random(20) 
y =np.random.random(20) 
z= np.random.random(20) 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', alpha = 0.5, lw=3, color= 'b') 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', alpha = 0.5, lw=3, color= 'r') 
ax.hist(z, bins=np.arange(0, 1, 0.1), alpha = 0.5, lw=3, color= 'k') 
ax.set_xlim(-0.5, 1.5) 
ax.set_ylim(0, 7) 
plt.show() 

enter image description here

Odpowiedz

13

plt.hist akceptuje dodatkowe argumenty kluczowe, które są przekazywane do konstruktora dla matplotlib.patches.Patch. W szczególności można przekazać argument o wartości fc=, który umożliwia ustawienie koloru łatki za pomocą krotki (R, G, B, A) podczas tworzenia histogramów. Zmiana wartości alpha facecolor nie wpływa na przejrzystość krawędzi:

ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, fc=(0, 0, 1, 0.5)) 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, fc=(1, 0, 0, 0.5)) 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, fc=(0, 0, 0, 0.5)) 

enter image description here

2

myślę chyba najgłupsze rozwiązanie to najprostszy i najlepszy? Po prostu odpisz histogramy, bez wewnętrznego koloru i bez alfa. To powinno zastąpić tylko linie histogramu.

Dodatkowo może chcesz, aby wyeliminować ryzyko wystąpienia Linie/kreski/kropki nie nakładają się na siebie, usuwając je całkowicie od pierwszego histogramu działki

import matplotlib as mpl 
import matplotlib.pyplot as plt 
import numpy as np 

x = np.random.random(20) 
y = np.random.random(20) 
z = np.random.random(20) 

fig = plt.figure() 
ax = fig.add_subplot(111) 

ax.hist(x, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'b') 
ax.hist(y, bins=np.arange(0, 1, 0.1), edgecolor='None', alpha = 0.5, color= 'r') 
ax.hist(z, bins=np.arange(0, 1, 0.1), edgecolor="None", alpha = 0.5, color= 'k') 


ax.hist(x, bins=np.arange(0, 1, 0.1), ls='dashed', lw=3, facecolor="None") 
ax.hist(y, bins=np.arange(0, 1, 0.1), ls='dotted', lw=3, facecolor="None") 
ax.hist(z, bins=np.arange(0, 1, 0.1), lw=3, facecolor="None") 

plt.show() 

bez drugich zamówień wykres powinien wyglądać twój rysunku bez wszelkie granice. Z dolnymi trzema poleceniami histogramu ramki są dodawane, aby uzyskać obraz poniżej. Prace nad Python3.4 Win7

[Przeniesienie bo widocznie nie mam wystarczająco dużo rep publikować zdjęcia]

Powiązane problemy