如何在matplotlib中绘制更多类型的行

时间:2015-10-26 03:21:55

标签: python matplotlib

matplotlib中只有4种线型:[' - ',' - 。',' - ',':']。可以在matplotlib中制作超过4种不同类型的线型吗?

3 个答案:

答案 0 :(得分:10)

您可以使用dashes参数创建远远超过这四种类型的内容,以指定自定义短划线样式。例如:

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

dashes参数是一个整数列表,用于指定点中空格和空格的大小:在上面的示例中,有一个10点划线,一个5点空间,一个20点划线,和另一个5点空间,然后重复序列。

答案 1 :(得分:6)

这是另一个示例,您可以使用它来尝试不同的自定义线条样式(定义为列表中的元素' 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

答案 2 :(得分:0)

最新的matplotlib文档(当前未发布)现在包括many custom linestyle examples。这是一个屏幕截图:

enter image description here

为便于复制粘贴,以下是用于绘制该图的部分代码:

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