matplotlib中是否有线条样式列表?

Yot*_*tam 67 python matplotlib linestyle

我正在编写一个可以做一些绘图的脚本.我想要它绘制几个数据系列,每个系列都有其独特的线条样式(不是颜色).我可以很容易地遍历列表,但是python中是否有这样的列表?

Céd*_*ien 84

根据文档,你可以通过这样做找到它们:

from matplotlib import lines
lines.lineStyles.keys()
>>> ['', ' ', 'None', '--', '-.', '-', ':']
Run Code Online (Sandbox Code Playgroud)

你可以用标记做同样的事情

编辑:在最新版本中,仍然有相同的样式,但您可以改变点/线之间的空间.

  • 标记的语法似乎略有不同:`来自matplotlib导入标记; markers.MarkerStyle.markers.keys()` (4认同)
  • 可惜的是,只有 4 个选项,但我有 5 条线要绘制。 (2认同)

Cir*_*四事件 29

plot 文件

http://matplotlib.org/1.5.3/api/pyplot_api.html#matplotlib.pyplot.plot有一个行+标记样式列表:

character description
'-'       solid line style
'--'      dashed line style
'-.'      dash-dot line style
':'       dotted line style
'.'       point marker
','       pixel marker
'o'       circle marker
'v'       triangle_down marker
'^'       triangle_up marker
'<'       triangle_left marker
'>'       triangle_right marker
'1'       tri_down marker
'2'       tri_up marker
'3'       tri_left marker
'4'       tri_right marker
's'       square marker
'p'       pentagon marker
'*'       star marker
'h'       hexagon1 marker
'H'       hexagon2 marker
'+'       plus marker
'x'       x marker
'D'       diamond marker
'd'       thin_diamond marker
'|'       vline marker
'_'       hline marker
Run Code Online (Sandbox Code Playgroud)

由于这是pyplot.plotdocstring的一部分,您还可以从终端看到它:

import matplotlib.pyplot as plt
help(plt.plot)
Run Code Online (Sandbox Code Playgroud)


Rus*_*ego 7

根据我的经验,将颜色和标记放在列表中是很好的,这样我可以在绘图时迭代它们.

以下是我获取此类列表的方法.这需要一些挖掘.

import matplotlib
colors_array = matplotlib.colors.cnames.keys()
markers_array = matplotlib.markers.MarkerStyle.markers.keys()
Run Code Online (Sandbox Code Playgroud)


Imp*_*est 5

您可以从Linestyle 示例中复制字典:

from collections import OrderedDict

linestyles = OrderedDict(
    [('solid',               (0, ())),
     ('loosely dotted',      (0, (1, 10))),
     ('dotted',              (0, (1, 5))),
     ('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))),

     ('loosely dashdotdotted', (0, (3, 10, 1, 10, 1, 10))),
     ('dashdotdotted',         (0, (3, 5, 1, 5, 1, 5))),
     ('densely dashdotdotted', (0, (3, 1, 1, 1, 1, 1)))])
Run Code Online (Sandbox Code Playgroud)

然后您可以遍历线型

fig, ax = plt.subplots()

X, Y = np.linspace(0, 100, 10), np.zeros(10)
for i, (name, linestyle) in enumerate(linestyles.items()):
    ax.plot(X, Y+i, linestyle=linestyle, linewidth=1.5, color='black')

ax.set_ylim(-0.5, len(linestyles)-0.5)

plt.show()
Run Code Online (Sandbox Code Playgroud)

或者你只是从那些中取出一个线条,

ax.plot([0,100], [0,1], linestyle=linestyles['loosely dashdotdotted'])
Run Code Online (Sandbox Code Playgroud)