2015-07-21 17 views
11

In matplotlib, voglio fare una linea usando matplotlib.pyplot che sta alternando trattini neri e gialli, e poi voglio includere quella linea nella legenda. Come lo faccio?Come ottenere colori alternati nella linea tratteggiata usando Matplotlib?

avrei potuto fare qualcosa di simile:

from matplotlib import pyplot as plt, gridspec 
import numpy as np 

grid = gridspec.GridSpec(1,1) 
ax = plt.subplot(grid[0,0]) 

x = np.arange(1,11) 
y = x * 2 

ax.plot(x, y, '-', color = 'black', linewidth = 1, label = 'my line') 
ax.plot(x, y, '--', color = 'yellow') 
ax.legend() 

plt.show() 

ma poi la linea sulla leggenda apparirebbe come una linea nera solida, piuttosto che precipitare come in bianco e giallo.

Ho guardato allo matplotlib.path_effects ma non riesco a capire se sia possibile ottenere ciò che voglio; Posso delineare o ombreggiare la linea, ma non sono sicuro di poter sovrapporre una linea tratteggiata di colori diversi.

+1

Breve domanda: la linea deve avere trattini gialli e neri (cioè un trattino giallo - spazio vuoto - trattino nero - spazio vuoto - trattino giallo ...). O sarebbe sufficiente adattare la voce della legenda per la linea tratteggiata gialla su una linea nera piena? – hitzg

+0

L'immagine che avevo in testa era di ciò che ha pubblicato Tanmaya Meher, qui sotto - ma se hai un modo di fare come descrivi, sarebbe probabilmente utile per le persone che visitano questa domanda in futuro, quindi ti incoraggio a aggiungilo comunque come risposta! –

risposta

10

Prova questo.

from matplotlib import pyplot as plt, gridspec, lines 

import numpy as np 

grid = gridspec.GridSpec(1,1) 
ax = plt.subplot(grid[0,0]) 

x = np.arange(1,11) 
y = x * 2 

ax.plot(x, y, '-', color = 'black', linewidth = 5) 
ax.plot(x, y, '--', color = 'lawngreen', linewidth = 5) 

dotted_line1 = lines.Line2D([], [], linewidth=5, linestyle="--", dashes=(10, 1), color='lawngreen') 
dotted_line2 = lines.Line2D([], [], linewidth=5, linestyle="-", dashes=(5, 4), color='black') 

plt.legend([(dotted_line1, dotted_line2)], ["My Line"]) 
plt.show() 

ho aumentato la larghezza della linea in modo che sia chiaramente visibile. Come il giallo non era chiaro su uno sfondo bianco; cambiato in verde. Mi dispiace per quello È possibile cambiare i colori in qualsiasi momento in qualsiasi momento :) output

+1

Grazie, questo è perfetto. –

Problemi correlati