How to draw more line types in matplotlib

There are only 4 types of line style in matplotlib: ['-', '-.', '-', ':']. Is it possible to make more than two different types of lines in matplotlib?

+7
source share
3 answers

You can create much more than these four types, using an argument dashesto specify custom style styles. For example:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10)
y = np.sin(x)
plt.plot(x, y, dashes=[10, 5, 20, 5], linewidth=2, color='black')

enter image description here

The argument dashesis a list of integers that determine the size of the dashes and spaces in points: in the above example, there is a ten-dot line, a 5-point area, a 20-point dash and another 5-point space, and then the sequence repeats.

+10

, , ( 'dashList') , :

import matplotlib.pyplot as plt

dashList = [(5,2),(2,5),(4,10),(3,3,2,2),(5,2,20,2)] 
# List of Dash styles, each as integers in the format: (first line length, first space length, second line length, second space length...)

# set up the axes to look nice:
frame1 = plt.gca() 
frame1.axes.xaxis.set_ticklabels([]) # hide x axis numbers
plt.xlim(0,6) # set x and y axis extents
plt.ylim(-0.5,len(dashList)-0.5)
plt.ylabel("dashList element") # add a label to the y axis

for n in range(0,len(dashList)):
    plt.plot([0.5,4],[n,n], color = 'black', linestyle='--', dashes=dashList[n]) # plot a horizontal line using each custom line style
    # NB plot.plt draws a line between the following points: ([x0,x1],[y0,y1])
    plt.text(4.5,n,dashList[n]) # ...and show the numbers used to generate each custom linestyle
plt.show()

enter image description here

+6

The latest matplotlib documentation (currently not released) includes many custom linear style examples right now. Here is a screenshot:

enter image description here

To simplify the insertion of copies, here is the part of the code used to create this graph:

linestyle_tuple = [
     ('loosely dotted',        (0, (1, 10))),
     ('dotted',                (0, (1, 1))),
     ('densely dotted',        (0, (1, 1))),

     ('loosely dashed',        (0, (5, 10))),
     ('dashed',                (0, (5, 5))),
     ('densely dashed',        (0, (5, 1))),

     ('loosely dashdotted',    (0, (3, 10, 1, 10))),
     ('dashdotted',            (0, (3, 5, 1, 5))),
     ('densely dashdotted',    (0, (3, 1, 1, 1))),

     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))]
0
source

Source: https://habr.com/ru/post/1613142/


All Articles