2015-07-03 2 views
9

Я пытаюсь построить матрицу с 2000 столбцами и 200000 строк. Я могу проверить участок и проверить экспорт матрицы фигурного штраф, когда матрица мала с помощьюPython plot Large matrix using matplotlib

matshow(my_matrix) 
show() 

Однако, когда несколько строк добавляются my_matrix, фигура становится очень узким, поскольку есть способ больше строк, чем столбцы, таким образом, потери точность при масштабировании. Могу ли я сделать матричную фигуру прокручиваемой? Если нет, то как я могу визуализировать такую ​​матрицу без потери точности?

Я также попытался вызвать savefig ('filename', dpi = 300), чтобы сохранить изображение, не теряя слишком много точности, но он бросает MemoryError, когда матрица большая. Большое спасибо!

+2

Возможно, слишком просто для ваших нужд, но вы попытались разделить вашу большую матрицу на части и затем вызвать matshow на каждом из них? – lesnikow

+7

'ax.set_aspect ('auto')' исправляет проблему аспекта, но ваши пиксели будут прямоугольниками, а не квадратами. Я делал что-то с 2k x 150k, но он начинает толкать пределы того, что может делать mpl (в коде растеризации C++ есть 32-битные целые числа). – tacaswell

+0

@tcaswell matshow() возвращает AxesImage. Я считаю, что функция set_aspect() доступна только для объекта Axes. Я не знаю, как получить объект Axes из AxesImage. – emily

ответ

1

Я закончил тем, что воспользовался предложениями @tcaswell и @ lesnikow.

Получить текущую ось для того, чтобы установить соотношение сторон авто должным образом, я также разделить матрицу на более мелкие матрицы:

import matplotlib.pylab as plt 

    for j in range(lower_bound_on_rows, upper_bound_on_rows): nums.append(j) 
    partial_matrix = my_matrix[nums, :] 

    plt.matshow(partial_matrix, fignum=100) 
    plt.gca().set_aspect('auto') 
    plt.savefig('filename.png', dpi=600) 

Моей матрица имеет длину по вертикали, так что нарезанному по строкам и сохранен все столбцы в меньшем матрицы. Если ваша матрица длинна по горизонтали, переверните индекс, как этот my_matrix [:, nums]