2016-05-20 11 views
1

Ich zeichne mehrere Zeilen in einem for Block und ich legte den Stil jeder Zeile mit Matplotlib dashes Argument.Plot kontinuierliche Linie mit 'Bindestriche' Argument in Matplotlib Plot()

Eine (oder mehrere) dieser Linien müssen kontinuierlich sein. Ich habe keine Möglichkeit gefunden, eine solche Linie zu zeichnen, außer einen einzigen extrem langen Strich zu machen, wie in der MCVE unten zu sehen ist. Das funktioniert, fühlt sich aber eher haschisch an.

Gibt es einen "richtigen" Weg, dies zu erreichen?

(ich weiß, dass ich nur plt.plot() ohne dashes Argument verwenden, um eine fortlaufende Handlung zu produzieren, aber ich brauche eine Menge von benutzerdefinierten Stil Linien, gemischt mit einem oder mehreren kontinuierlichen Linien zu produzieren)


MCVE :

import matplotlib.pyplot as plt 
import numpy as np 


col = ['c', 'm', 'g', 'y', 'k'] 
c_dash = [[8, 4], [8, 4, 2, 4], [2, 2], [8, 4, 2, 4, 2, 4], [1000, 1]] 

for i in range(5): 
    x, y = range(10), np.random.uniform(0., 10., 10) 
    plt.plot(x, y, color=col[i], dashes=c_dash[i]) 

plt.savefig('test.png', dpi=300) 

enter image description here

+0

Ist alles, was Sie bedeuten 'plt.plot (x, y, '-')'? – lanery

+0

Grundsätzlich ja. Wenn Sie es versuchen, sehen Sie, dass das Bindestrich-Argument "-'' nicht akzeptiert. – Gabriel

+1

Immer noch eine Art Hacky, aber 1000 mit 'np.inf' zu ersetzen scheint zu funktionieren. – lanery

Antwort

1

Wenn Sie Ihre c_dash Liste ändern, um eine Offset-param enthalten ( Offset, ( on, aus Sequenz )) Sie können dann Linestyle als Ihre Kwarg anstelle von Bindestrichen verwenden. Auf diese Weise können Sie zusätzlich zu Ihren benutzerdefinierten Bindestrichen die Strichart-Schlüsselwörter ‘solid’ | ‘dashed’, ‘dashdot’, ‘dotted’ verwenden.

import matplotlib.pyplot as plt 
import numpy as np 


col = ['c', 'm', 'g', 'y', 'k'] 
c_dash = [[0,[8, 4]], [0,[8, 4, 2, 4]], 'solid', [0,[8, 4, 2, 4, 2, 4]], 'solid'] 


for i in range(5): 
    x, y = range(10), np.random.uniform(0., 10., 10) 
    plt.plot(x, y, color=col[i], linestyle=c_dash[i]) 

enter image description here

+0

Das ist eine nette Antwort, ich war mir des Offsetparameters nicht bewusst. Danke BHawk! – Gabriel