如何将一个图形的轴分配给另一个图形的轴?

How to assign axes from one figure to axes from another figure?

各位!

我想将一个图形的轴分配给另一个图形的轴,你能告诉我怎么做吗?

实际上,我有两个函数,都是 return 轴。我想创建一个带有两个轴的新图形,这两个轴将准确表示我从函数中获得的两个轴。我尝试使用属性进行操作,但我失败了:(

所以这是我的代码示例:

def draw(data, markup_data, size = 7):

    ...

    _, ax2 = plt.subplots(figsize=(7, 7))
    ax2.scatter(x, y, s=size, c=data, linewidths=0, alpha=0.9)
    ax2.grid(False)
    return ax2

主要内容:

fig, axes = plt.subplots(1,2, figsize=(10,5))

axes[0] = draw(data_1)
axes[1] = draw(data_2)

fig.show()

轴不能移动到另一个图形。推荐的方法是将 ax 作为参数提供给 draw(....., ax=...).

代码结构如下:

from matplotlib import pyplot as plt

def draw(data, size=7, ax=None):
    if ax is None:
        ax = plt.gca()  # use current axis if none is given
    ax.scatter(data['x'], data['y'], s=size, c=data['c'], linewidths=0, alpha=0.9)
    ax.grid(False)

fig, axes = plt.subplots(1, 2, figsize=(10, 5))
draw(data_1, ax=axes[0])
draw(data_2, ax=axes[1])
fig.show()

通常还会提供 scatter 的参数。 Python 通过 **kwargs 支持此类额外关键字并将它们转换为字典。对于用户未提供的 scatter 参数,draw 函数可以设置自己的默认值。这是一个更详细的示例:

from matplotlib import pyplot as plt
import numpy as np

def draw(data, size=7, ax=None, **kwargs):
    if ax is None:
        ax = plt.gca()  # use current axis if none is given
    print(kwargs)
    if 's' not in kwargs:
        kwargs['s'] = 7
    if 'linewidths' not in kwargs:
        kwargs['linewidths'] = 0
    if 'alpha' not in kwargs:
        kwargs['alpha'] = 0.9
    print(kwargs)
    ax.scatter(data['x'], data['y'], c=data['c'], **kwargs)
    ax.grid(False)

data_1 = {'x': np.random.rand(800), 'y': np.random.rand(800), 'c': np.random.rand(800)}
data_2 = {'x': np.random.rand(200), 'y': np.random.rand(200), 'c': np.random.rand(200)}

fig, axes = plt.subplots(1, 2, figsize=(10, 5))
draw(data_1, ax=axes[0])
draw(data_2, ax=axes[1], linewidths=1, edgecolor='gold', s=20)
fig.show()