我正在 matplotlib 中使用用户可以修改的图形。由于应用程序的设计方式,当用户想要更改图形的属性(例如 xlim
)时,输入将在字典中接收,例如 {'xlim ':值}
。
由于我无法提前知道用户想要更改哪些属性,因此我一直尝试使用 set()
来更改属性;但是,当我像这样处理字典时:
for key, value in changes.iteritems():
if self.seen[key][1] == 1: # Key is seen
self.obj.set(key=value)
我收到错误:AttributeError:'AxesSubplot'对象没有属性'set_key'
是否有其他方法可以在 matplotlib 中设置属性,而我不需要提前知道哪个特定属性将被更改?我真的想不出不使用 set()
/setp()
最佳答案
如cphlewis已经在他的 answer 中指出,问题在于如何将键/值对传递给 set
。
但是你的问题与matplotlib无关,它是一个常见的python问题:在matplotlib中像set
这样定义的函数接收**kwargs
中的关键字参数作为字典。键总是字符串!因此,如果你有一个函数 func
:
def func(**kwargs):
pass
并用以下方式调用它:
func(foo='bar')
那么kwargs
将是一个字典:{'foo':'bar'}
。因此,如果您调用:
key = 'foo'
value = 1
ax.set(key=value)
然后ax.set
将收到这个字典:{'key':1}
(并且不会{'foo' :1}
!)。由于 key
不是 axes
的属性,这会导致错误。
所以你可以这样做:
kwargs_for_set = dict()
for key, value in changes.iteritems():
if self.seen[key][1] == 1: # Key is seen
kwargs_for_set[key] = value
self.obj.set(**kwargs_for_set)
关于python - 使用 set()/setp() 设置 matplotlib 中的未知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30330606/