How to get alternating colours in dashed line using matplotlib?
A slight adaptation, if you need an overlay of two dotted lines. Essentially, the same approach as described by Tanmaya Meher can be used, but to get the offsets right, one needs to make small hack in the dashes spec.
Concretely, let's say you want 1 dot, 1 blank with alternating colors
. . . .
then you can start the first dotted line with dash spec [1,3]
. Now the second color should start at pos 2 and then have the same spec, so that they nicely interleave. As there is no explicit way to set an offset, one needs a workaround dash sequence [0,2, 1, 1]
, that is no point, two blanks, a point, one blank, which sets the desired offset.
import matplotlib.pyplot as plt
from matplotlib.lines import Line2D
color1 = "blue"
color2 = "orange"
fig, ax = plt.subplots()
l1 = Line2D([0,1], [0.5, 0.5], linestyle="dotted", color=color1, lw=10)
l1.set_dashes([0, 2, 1,1])
l2 = Line2D([0,1], [0.5, 0.5], linestyle="dotted", color=color2, lw=10)
l2.set_dashes([1, 3])
ax.add_artist(l1)
ax.add_artist(l2)
ax.legend(handles=((l1,l2),), labels=("label",), handlelength=3)
Try this.
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()
i increased the line width so it is clearly visible. As yellow was not that clear in a white background; changed it to green. Sorry about that. You can change colors any time any way :)