Несколько графиков в одной фигуре matplotlib - PullRequest
3 голосов
/ 23 февраля 2012

В скрипте Python у меня есть набор двумерных массивов с плавающей точкой NumPy, скажем, n1, n2, n3 и n4. Для каждого такого массива у меня есть два целочисленных значения offset_i_x и offset_i_y (замените i на 1, 2, 3 и 4).

В настоящее время я могу создать изображение для одного массива NumPy, используя следующий скрипт:

   def make_img_from_data(data)
        fig = plt.imshow(data, vmin=-7, vmax=0)
        fig.set_cmap(cmap)
        fig.axes.get_xaxis().set_visible(False)
        fig.axes.get_yaxis().set_visible(False)
        filename = "my_image.png"
        plt.savefig(filename, bbox_inches='tight', pad_inches=0)
        plt.close()

Теперь я хотел бы считать каждый массив мозаичным изображением большего размера и должен располагаться в соответствии со значениями offset_i_x / y, чтобы в итоге написать одну цифру вместо 4 (в моем примере). Я очень новичок в MatplotLib и Python в целом. Как я могу это сделать?

Также я заметил, что вышеприведенный скрипт создает изображения размером 480x480 пикселей, независимо от размера исходного массива NumPy. Как я могу контролировать размер получаемого изображения?

Спасибо

Ответы [ 2 ]

4 голосов
/ 25 февраля 2012

Вы можете рассмотреть add_axes функцию matplotlib.pyplot.

Ниже приведен грязный пример, основанный на том, чего вы хотите достичь.Обратите внимание, что я выбрал значения смещений, поэтому пример работает.Вам нужно будет выяснить, как преобразовать значения смещений, которые у вас есть для каждого изображения, в дробные части фигуры.

import numpy as np
import matplotlib.pyplot as plt

def make_img_from_data(data, offset_xy, fig_number=1):
    fig.add_axes([0+offset_xy[0], 0+offset_xy[1], 0.5, 0.5])
    plt.imshow(data)

# creation of a dictionary with of 4 2D numpy array
# and corresponding offsets (x, y)

# offsets for the 4 2D numpy arrays
offset_a_x = 0
offset_a_y = 0
offset_b_x = 0.5
offset_b_y = 0
offset_c_x = 0
offset_c_y = 0.5
offset_d_x = 0.5
offset_d_y = 0.5

data_list = ['a', 'b', 'c', 'd']
offsets_list = [[offset_a_x, offset_a_y], [offset_b_x, offset_b_y],
                [offset_c_x, offset_c_y], [offset_d_x, offset_d_y]]

# dictionary of the data and offsets
data_dict = {f: [np.random.rand(12, 12), values] for f,values in zip(data_list, offsets_list)}

fig = plt.figure(1, figsize=(6,6))

for n in data_dict:
    make_img_from_data(data_dict[n][0], data_dict[n][1])

plt.show()

, что дает:

этот результат http://i41.tinypic.com/33wnrqs.png

0 голосов
/ 23 февраля 2012

Если я правильно понимаю, вы, похоже, ищете subplot с. Взгляните на галерею миниатюр для примеров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...