当前有效matplotlib
版本为:3.4.1
。
pyplot
模块提供了获取/设置对象属性值的接口。功能类似于Python内置函数getattr
和setattr
。从源码上来看,get()
是getp()
的别名,两者是等价的。setp()
、getp()
的底层实现是基于Python内置函数getattr
和setattr
。
getp()
函数:获取对象属性getp()
函数的签名为matplotlib.pyplot.getp(obj, *args, **kwargs)
。
常用参数为:
obj
:需要查询属性的对象。类型为 Artist
对象,即matplotlib
所有可见对象。必备参数。property
:需要查询的属性。类型为字符串或None
, 默认值为 None
。
None
时,返回对象的所有属性。obj.get_属性名()
的值。返回值为查询对象的某个属性或为None
,此时打印输出全部属性。
getp()
函数import matplotlib.pyplot as plt
# 获得Line2D对象line
line,=plt.plot([2,1])
# 获取line的color属性值
# 通过Python内置函数getattr和_color属性获取
c1=getattr(line,"_color")
# 通过Python内置函数getattr和get_color方法获取
c2=getattr(line,"get_color")()
# 通过getp函数获取
c3=plt.getp(line,"color")
print(c1,c2,c3)
# 输出line对象的所有属性
plt.getp(line)
plt.show()
控制台输出为:
# color属性值
#1f77b4 #1f77b4 #1f77b4
# line对象所有属性列表
agg_filter = None
alpha = None
animated = False
antialiased or aa = True
children = []
clip_box = TransformedBbox( Bbox(x0=0.0, y0=0.0, x1=1.0, ...
clip_on = True
clip_path = None
color or c = #1f77b4
......
setp()
函数:设置对象属性或属性的取值要求setp()
函数的签名为matplotlib.pyplot.setp(obj, *args, **kwargs)
。
常用参数为:
obj
:需要设置属性的对象或对象列表。类型为 Artist
对象或 Artist
对象列表,即matplotlib
所有可见对象。必备参数。file
:当查询属性取值要求时输出文件的位置。类文件对象。默认值为 sys.stdout
。*args
、**kwargs
:需要设置的属性值。setp()
函数的调用方式有很多种:
设置一个对象的一个属性。
line, = plot([1, 2, 3])
setp(line, linestyle='--')
设置多个对象的一个属性。
lines = plot([1, 2, 3],[1, 2, 3],[4, 5, 6],[4, 5, 6])
setp(lines, linestyle='--')
设置一个对象的多个个属性。
setp(line, linewidth=2, color='r')
输出该属性的取值要求。
setp(line, 'linestyle')
输出为: linestyle: {'-', '--', '-.', ':', '', (offset, on-off-seq), ...}
输出所有可设置的属性及其取值要求。
setp(line)
输出为:
agg_filter: a filter function, ...
setp
还支持 MATLAB 式的键值对。
setp(lines, 'linewidth', 2, 'color', 'r')
setp()
函数import matplotlib.pyplot as plt
line,=plt.plot([2,1])
# 利用键值对设置属性
plt.setp(line,color='b')
# matlab式键值对
plt.setp(line,"color","g")
# 利用内置哈数setattr设置属性值
setattr(line,"_color",'red')
# 将color属性取值要求输出到标准输出
plt.setp(line,"color")
# 将line对象所有属性取值要求输出到标准输出
plt.setp(line)
# 设置多个对象的属性
lines = plt.plot([1, 2, 3],[1, 2, 3],[4, 5, 6],[4, 5, 6])
plt.setp(lines, linestyle='--')
# 将获取到的color属性取值要求输出到setp.log中
with open("setp.log","a+") as f:
plt.setp(line,"color",file =f)
plt.show()
控制台输出为:
# color属性取值要求
color: color
# 所有属性取值要求
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: scalar 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: `.CapStyle` or {
'butt', 'projecting', 'round'}
dash_joinstyle: `.JoinStyle` or {
'miter', 'round', 'bevel'}
......
在matplotlib
当中,所有可见对象都继承自Artist
类,因此,这些对象被称为Artist。
pyplot
模块的setp()
、getp/get()
等函数底层其实都是调用的Artist
类的相关方法。
属性操作中属性名称可能是一个令人疑惑的地方。
在matplotlib
当中,实际的属性值存储在_
开头的属性中,然后对外提供setter 、getter方法调用。
例如Line2D
对象,其颜色属性为_color
,对外接口为get_color()
、set_color()
。通过内置函数dir()
即可列出对象的属性。
matplotlib.pyplot
模块
def getp(obj, *args, **kwargs):
return matplotlib.artist.getp(obj, *args, **kwargs)
def get(obj, *args, **kwargs):
return matplotlib.artist.get(obj, *args, **kwargs)
def setp(obj, *args, **kwargs):
return matplotlib.artist.setp(obj, *args, **kwargs)
matplotlib.artist
模块
def getp(obj, property=None):
if property is None:
insp = ArtistInspector(obj)
ret = insp.pprint_getters()
print('\n'.join(ret))
return
return getattr(obj, 'get_' + property)()
# alias
get = getp
def setp(obj, *args, file=None, **kwargs):
if isinstance(obj, Artist):
objs = [obj]
else:
objs = list(cbook.flatten(obj))
if not objs:
return
insp = ArtistInspector(objs[0])
if not kwargs and len(args) < 2:
if args:
print(insp.pprint_setters(prop=args[0]), file=file)
else:
print('\n'.join(insp.pprint_setters()), file=file)
return
if len(args) % 2:
raise ValueError('The set args must be string, value pairs')
# put args into ordereddict to maintain order
funcvals = OrderedDict((k, v) for k, v in zip(args[::2], args[1::2]))
ret = [o.update(funcvals) for o in objs] + [o.set(**kwargs) for o in objs]
return list(cbook.flatten(ret))