2017-01-27 3 views
1

Ich habe festgestellt, dass zwei benachbarte Bereiche überlappen, so dass in der Mitte eine störende Linie erscheint. Ich habe "capstyle = 'butt'" ausprobiert, mit dem ich Überlappungen zwischen den Zeilen vermeiden konnte, aber hier funktioniert es nicht.In Matplotlib, Wie vermeidet man axvspan Überlappung?

hier ein minimales Beispiel:

import matplotlib.pylab as plt 

ax = plt.subplot(111) 

ax.axvspan(0, 0.5, color = 'red', alpha = 0.13, capstyle = 'butt') 
ax.axvspan(0.5, 1, color = 'blue', alpha = 0.13, capstyle = 'butt') 

plt.show() 

Antwort

3

Das Problem, das Sie haben nicht gebührt Kappen der Leitung, da axvspan ein Polygon zeichnet. Das Problem ist, dass dieses Polygon standardmäßig eine Grenze mit einer gegebenen Linienbreite hat (ein Pixel, nehme ich an).

Also, um nur die Bereiche, ohne dass die "Grenze", stellen Sie die Linienbreite (lw) auf Null:

import matplotlib.pylab as plt 

ax = plt.subplot(111) 

ax.axvspan(0, 0.5, color = 'red', alpha = 0.13, lw=0) 
ax.axvspan(0.5, 1, color = 'blue', alpha = 0.13, lw=0) 

plt.show() 
1

Statt color, facecolor innerhalb axvspan verwenden. Die Lösung von @heltonbiker funktioniert super ist die Breite der Grenze loswerden. Und, zumindest in der Matplotlib-Version, die ich benutze, 2.0.0, mit nur facecolor nicht die Grenze zeichnen.

import matplotlib.pylab as plt 

fig,ax = plt.subplots() 

ax.axvspan(0, 0.5, facecolor = 'red', alpha = 0.13) 
ax.axvspan(0.5, 1, facecolor = 'blue', alpha = 0.13) 

plt.show() 

Mit nur facecolor wird nicht die Grenze ziehen: enter image description here

color Verwendung wird das Rechteck füllen und eine Grenze ziehen: enter image description here

+0

Diese Lösung funktioniert nicht. – heracho

+0

Ich frage mich, ob es eine Angelegenheit oder Matplotlib-Version ist. –

+0

Könnte sein, .. Ich benutze Version 1.5.1 und die Zeile ist vorhanden. – heracho

Verwandte Themen