2015-07-21 11 views
11

W matplotlib chcę utworzyć linię przy użyciu matplotlib.pyplot, która jest naprzemiennie czarnymi i żółtymi kresek, a następnie chcę dołączyć tę linię do legendy. Jak mogę to zrobić?Jak uzyskać naprzemienne kolory linii przerywanej przy użyciu matplotlib?

mógłby zrobić coś takiego:

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() 

ale wtedy linia na legendzie wydaje jako solidnego czarną linią, a nie czarno-żółty myślnikami.

Spojrzałem na matplotlib.path_effects, ale nie mogę stwierdzić, czy można osiągnąć to, czego chcę; Mogę zarysować lub przesłonić linię, ale nie jestem pewien, czy mogę nakładać przerywaną linię w innym kolorze.

+1

Krótkie pytanie: Czy linia ma żółte i czarne kreski (np. Żółty kreska - puste miejsce - czarny kreska - puste miejsce - żółty kreska ...). Lub czy wystarczyłoby dostosowanie wpisu legendy dla żółtej linii przerywanej na wierzchu pełnej czarnej linii? – hitzg

+0

Obraz, który miałem w głowie, był pod tym, co opublikował Tanmaya Meher poniżej - ale jeśli masz sposób robienia tego, co opisujesz, byłoby to prawdopodobnie przydatne dla osób odwiedzających to pytanie w przyszłości, więc zachęcam cię do dodaj to jako odpowiedź! –

Odpowiedz

10

Spróbuj tego.

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() 

Zwiększono szerokość linii, aby była wyraźnie widoczna. Ponieważ żółty nie był tak czysty na białym tle; zmieniono na zielony. Przepraszam za to. Możesz zmieniać kolory w dowolnym momencie :) output

+1

Dzięki, to jest idealne. –

Powiązane problemy