python - 在 Python 中将轴作为 **kwarg 传递

标签 python matplotlib plot multiple-axes

我正在构建一个包装器来在 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)

但后来我得到:

类型错误:plotContourf() 获得关键字参数“轴”的多个值

我知道此错误是由于“axes”已经是关键字参数造成的。我知道我可以使用不同的关键字,但是轴 kwarg 有什么用?

谢谢!

编辑: 完整回溯(对于上述第二个选项):

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)

最佳答案

问题是您使用 -1*hsofs_mesh['深度'] 代替 axes 调用函数,然后添加 axes 最后再次关键字参数。

In [10]: def fun(a, x=1, *args, **kwargs):
    ...:     print(x)
    ...:     

In [11]: fun(1, 3, x=4)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-11-31b5e42fb4be> in <module>()
----> 1 fun(1, 3, x=4)

TypeError: fun() got multiple values for keyword argument 'x'

在这个示例中,它将 3 读取为 x,然后我传递 x=4。导致您遇到的错误。

解决方案是向函数添加另一个参数,如下所示:

def plotContourf(thing, other_thing=None, axes=None, *argv, **kwargs):

关于python - 在 Python 中将轴作为 **kwarg 传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45698460/

相关文章:

r - 具有时间点和格式日期的时间线

python - 当 A 列中的值低于 B 列时的计数频率

python - 如何从列表列表创建 Pandas DataFrame?

python - Matplotlib numpy 矩阵的时间序列图

python - Matplotlib 在循环中绘图时不会打开绘图窗口

r - 将 R 中的 2 个预测概率图与 SjPlot 包结合起来

python - 动态调整图像大小 pyGTK (python)

python - 如何使用 pytest 模拟 os.environ?

python - 如何在 Seaborn 的热图轴上表达类

python - Matplotlib 自动缩放