Использование переданных объектов оси в фигуре matplotlib.pyplot?

В настоящее время я пытаюсь использовать переданный объект оси, созданный в функции, например:

def drawfig_1():
    import matplotlib.pyplot as plt

    # Create a figure with one axis (ax1)
    fig, ax1 = plt.subplots(figsize=(4,2))

    # Plot some data
    ax1.plot(range(10))

    # Return axis object
    return ax1

Мой вопрос: как я могу использовать возвращенный объект оси, ax1, на другом рисунке? Например, я хотел бы использовать его следующим образом:

# Setup plots for analysis
fig2 = plt.figure(figsize=(12, 8))

# Set up 2 axes, one for a pixel map, the other for an image
ax_map = plt.subplot2grid((3, 3), (0, 0), rowspan=3)
ax_image = plt.subplot2grid((3, 3), (0, 1), colspan=2, rowspan=3)

# Plot the image
ax_psf.imshow(image, vmin=0.00000001, vmax=0.000001, cmap=cm.gray)

# Plot the map
????      <----- #I don't know how to display my passed axis here...

Я пробовал такие утверждения, как:

ax_map.axes = ax1

и хотя у меня скрипт не крашится, у меня ось выходит пустая. Любая помощь будет оценена по достоинству!


person AstroCaribe    schedule 05.03.2014    source источник


Ответы (1)


Вы пытаетесь сначала создать сюжет, а затем поместить его в качестве подзаговора в другой график (определенный subplot2grid). К сожалению, это невозможно. Также см. этот пост: Как включить рисунок matplotlib объект как сюжет?.

Сначала вам нужно будет создать подзаголовок и передать ось подзаговора вашей функции drawfig_1(), чтобы построить его. Конечно, drawfig_1() нужно будет изменить. например:

def drawfig_1(ax1):
    ax1.plot(range(10))
    return ax1

# Setup plots for analysis
fig2 = plt.figure(figsize=(12, 8))

# Set up 2 axes, one for a pixel map, the other for an image
ax_map = plt.subplot2grid((3, 3), (0, 0), rowspan=3)
ax_image = plt.subplot2grid((3, 3), (0, 1), colspan=2, rowspan=3)

# Plot the image
ax_image.imshow(image, vmin=0.00000001, vmax=0.000001, cmap=cm.gray)
# Plot the map:
drawfig_1(ax_map)
person CT Zhu    schedule 05.03.2014
comment
Спасибо, @ct-zhu, это было так. У меня действительно была обратная логика, и ваше решение сработало для меня. - person AstroCaribe; 07.03.2014