Я создаю оболочку для создания графиков в Matplotlib и хочу иметь возможность необязательно указывать оси, по которым строить график.
Например, у меня есть:
def plotContourf(thing, *argv, **kwargs):
return plt.tricontourf(thing[0], thing[1], thing[2], *argv, **kwargs)
def plotScatter(thing, *argv, **kwargs )
return plt.scatter(thing[0], thing[1], *argv, **kwargs)
fig, ((ax0,ax1),(ax2,ax3)) = plt.subplots(2,2)
plotContourf(some_thing, axes=ax0)
plotScatter(some_thing, axes=ax2)
Который работает, но все отображается на самых последних осях (ax3), а не в осях, указанных через kwargument осей. (Здесь нет ошибок, он просто появляется на неправильных осях)
Для любопытных, причина, по которой я хочу сделать это, заключается в том, чтобы пользователь мог либо установить оси, либо для ленивых людей они могут просто вызвать plotContourf() без указанных осей и все равно получить что-то, что они могут plt.show( )
С другой стороны, я пытался
def plotContourf(thing, axes=None, *argv, **kwargs):
if axes is None:
fig, axes = plt.subplots()
return axes.tricontourf(thing[0], thing[1], thing[2], *argv, **kwargs)
Но потом я получаю:
TypeError: plotContourf() получил несколько значений для аргумента ключевого слова «оси»
Я понимаю, что эта ошибка связана с тем, что «оси» уже являются аргументом ключевого слова. Я знаю, что могу использовать другое ключевое слово, но тогда какая польза от осей kwarg?
Спасибо!
EDIT: Полная трассировка (для второго варианта, описанного выше):
Traceback (most recent call last):
File "mods.py", line 51, in <module>
adcirc.plotContourf(hsofs_mesh, -1*hsofs_mesh['depth'], axes=ax0)
TypeError: plotContourf() got multiple values for keyword argument 'axes'
И собственно обертка:
def plotContourf(grid, axes=None, *argv, **kwargs):
if axes is None:
fig, axes = plt.subplot()
return axes.tricontourf(grid['lon'], grid['lat'], grid['Elements']-1, *argv, **kwargs)
axes
является аргументом ключевого слова. Вы фактически звонитеplotContourf(axes=something, exes=somethingelse)
. - person Jim Wright   schedule 15.08.2017if axes is None:
илиif not axes:
- person Cory Madden   schedule 15.08.2017