不同于之前几篇文章,这个Line2D是一个类对象,而不是一个方法,下面是来自官网的定义。
class
matplotlib.lines.
Line2D
(xdata, ydata, linewidth=None, linestyle=None, color=None, marker=None, markersize=None, markeredgewidth=None, markeredgecolor=None, markerfacecolor=None, markerfacecoloralt='none', fillstyle=None, antialiased=None, dash_capstyle=None, solid_capstyle=None, dash_joinstyle=None, solid_joinstyle=None, pickradius=5, drawstyle=None, markevery=None, **kwargs)
为什么要花一章节来介绍这个类呢,是因为我们平时用的最多的就是plt.plot()绘图方法,而这个函数的返回值就是一个Line2D的一个实例化对象,我们上一篇文章中说过,plt.plot()中有一个关键字参数列表**kwargs,这里面有很多关于线line的定制化设计参数,通过修改对应的关键字就可以创建出不同类型的线,这里再放上该方法的定义:
matplotlib.pyplot.plot(*args, scalex=True, scaley=True, data=None, **kwargs)
还是举例来说,要求绘制一个线宽为5的线。下面代码一是我们之前学习plt.plot()的时候的做法,那么问题来了,如果你想在绘制线了之后修改线宽怎么办,重新绘制一个不太好吧,所以这时候可以通过方式二的代码,将plot()返回的Line2D实例保存下来,通过面向对象的方式来调用相应的实例方法来修改对象的线宽等属性。这里再次强调plt.plot()函数的返回值是一个存放Line2D类型的元素的列表。这两种方法的实现效果是完全一样的,并且在plt.plot()中的**kwargs中支持的关键字都有其对应的setter方法。
代码一:
fig = plt.figure()
fig.suptitle('Figure: sample for Line2D')
plt.plot([1,4,2,3], linewidth=5)
plt.show()
代码二:
line, = plt.plot([1,4,2,3], linewidth=5) #返回值是一个列表,类似[Line2D实例, ]
line.set_linewidth(5)
这里偷懒从官网复制过来的Line2D的所有属性,可以看出来很多我们在学习plt.plot()绘图的时候都已经见过,可以再回去看看plot()的介绍。下面还是会选几个常用的,举例子来说明一下怎么使用即可。
Property | Description |
---|---|
agg_filter | a filter function, which takes a (m, n, 3) float array and a dpi value, and returns a (m, n, 3) array |
alpha | float or None |
animated | bool |
antialiased or aa | bool |
clip_box | Bbox |
clip_on | bool |
clip_path | Patch or (Path, Transform) or None |
color or c | color |
contains | unknown |
dash_capstyle | {'butt', 'round', 'projecting'} |
dash_joinstyle | {'miter', 'round', 'bevel'} |
dashes | sequence of floats (on/off ink in points) or (None, None) |
data | (2, N) array or two 1D arrays |
drawstyle or ds | {'default', 'steps', 'steps-pre', 'steps-mid', 'steps-post'}, default: 'default' |
figure | Figure |
fillstyle | {'full', 'left', 'right', 'bottom', 'top', 'none'} |
gid | str |
in_layout | bool |
label | object |
linestyle or ls | {'-', '--', '-.', ':', '', (offset, on-off-seq), ...} |
linewidth or lw | float |
marker | marker style string, Path or MarkerStyle |
markeredgecolor or mec | color |
markeredgewidth or mew | float |
markerfacecolor or mfc | color |
markerfacecoloralt or mfcalt | color |
markersize or ms | float |
markevery | None or int or (int, int) or slice or List[int] or float or (float, float) or List[bool] |
path_effects | AbstractPathEffect |
picker | unknown |
pickradius | float |
rasterized | bool or None |
sketch_params | (scale: float, length: float, randomness: float) |
snap | bool or None |
solid_capstyle | {'butt', 'round', 'projecting'} |
solid_joinstyle | {'miter', 'round', 'bevel'} |
transform | matplotlib.transforms.Transform |
url | str |
visible | bool |
xdata | 1D array |
ydata | 1D array |
zorder | float |
举例:
第一个是set_color,设置线的颜色,等价于set_c
fig = plt.figure()
fig.suptitle('Figure: sample for Line2D')
line, = plt.plot([1,4,2,3])
line.set_color('r')
plt.show()
第二个是set_drawstyle,设置阶梯式的绘图方式,等价于set_c,效果看图
line.set_ds('steps-mid')
第三个是set_linestyle,设置的是直线的类型,等价于set_ls
line.set_ls('--')
第四个是set_marker,设置每个点的类型
line.set_marker('*')
除了上面各种的setter之外还有对应的getter,这里就不一一绘制了,可以自己尝试一下,更多的方法属性请移步官网。
marker = line.get_marker()
color = line.get_color()
linewidth = line.get_linewidth()