2016-03-22 10 views
3

Es gibt zwei Beispiele von Parzellen mit matplotlib erstellt (beide von matplotlib Homepage):Python matplotlib gibt falsche Ecken der Grenze

The first one (rechts). The second one (falsch).

Die Ecken der Grenze in der zweiten (wenn stark vergrößert) fehlt ein kleines Stück. Die Linie endet wo der Mittelpunkt der senkrechten Linie ist, nicht wo die weitere Kante ist.

Aber selbst wenn ich den Quellcode für das Bild verwendet werden, die direkt am Netz ist:

import matplotlib.pyplot as plt 
import numpy as np 

x, y = np.random.randn(2, 100) 
fig = plt.figure() 
ax1 = fig.add_subplot(211) 
ax1.xcorr(x, y, usevlines=True, maxlags=50, normed=True, lw=2) 
ax1.grid(True) 
ax1.axhline(0, color='black', lw=2) 

ax2 = fig.add_subplot(212, sharex=ax1) 
ax2.acorr(x, usevlines=True, normed=True, maxlags=50, lw=2) 
ax2.grid(True) 
ax2.axhline(0, color='black', lw=2) 

plt.show() 

ich falsches Ergebnis. Wieso ist es so? Ein Fehler in meiner Version von Matplotlib/Python? Etwas anderes?

Ich benutze Python 3.4.3 und Matplotlib 1.3.1.

Vielen Dank im Voraus.

+0

Ich füge [Screenshot] (http://i.stack.imgur.com/uNWdt.png) hinzu. – fales

Antwort

2

Dies ist kein Fehler, sondern eher der Standard capstyle für die Achsenstacheln. Die capstyle definiert, wie eine Zeile beendet wird und wie sie aussieht, wenn zwei Zeilen zusammenkommen.

Sie können capstyle als butt (Standard), round oder projecting festlegen. Sie können dies ändern, indem Sie spines.set_capstyle für jeden Achsenstachel aufrufen.

for spine in ax.spines.values(): 
    spine.set_capstyle('projecting') 

Für Ihre spezifische Version von matplotlib (1.3), sieht es aus wie das ist, wenn sie den Standard capstyle für Patch-Objekte geändert butt zu sein, aber es gab keinen Weg, um die capstyle der spines zu setzen, wie es ist in der aktuellen Version:

für die Patch verwendete capstyle ist jetzt hintern, für die meisten anderen Objekte mit dem Standard konsistent zu sein und soliden erscheinenden Probleme mit nicht-festen Linienstil zu vermeiden, wenn eine große Linienbreite verwenden. Zuvor verwendete Patch capstyle = 'projecting'.

+0

scheint so ein 'rcParam' zu sein, aber ich kann keine relevanten Optionen finden – tom

+0

@tom Vielleicht' lines.dash_capstyle'? – Suever

+0

nein, das wird für gestrichelte 'line2D' Objekte sein, vermute ich – tom

Verwandte Themen