2015-07-03 22 views
9

Tôi đang cố gắng vẽ một ma trận với 2000 cột và 200000 hàng. Tôi có thể kiểm tra âm mưu và kiểm tra xuất mức phạt hình ma trận khi ma trận là nhỏ sử dụngCốt truyện Python Ma trận lớn sử dụng matplotlib

matshow(my_matrix) 
show() 

Tuy nhiên, khi nhiều hàng được thêm vào my_matrix, con số này trở nên rất hẹp vì có hàng cách hơn cột, do đó mất độ chính xác khi phóng to. Tôi có thể tạo hình ma trận có thể cuộn được không? Nếu không, làm thế nào tôi có thể hình dung ma trận như vậy mà không làm mất độ chính xác?

Tôi cũng đã cố gắng gọi savefig ('tên tệp', dpi = 300) để lưu hình ảnh mà không mất quá nhiều độ chính xác, nhưng nó ném MemoryError khi ma trận lớn. Cảm ơn nhiều!

+2

Có thể quá đơn giản cho nhu cầu của bạn, nhưng bạn đã thử phân tách ma trận lớn thành các phần rồi gọi matshow trên mỗi phần? – lesnikow

+7

'ax.set_aspect ('auto')' sẽ sửa vấn đề về khía cạnh, nhưng điểm ảnh của bạn sẽ là hình chữ nhật chứ không phải hình vuông. Tôi đã làm những việc với 2k x 150k, nhưng nó đang bắt đầu đẩy các giới hạn của những gì mpl có thể làm (có một số số nguyên 32 bit được mã hóa cứng trong mã rasterization C++). – tacaswell

+0

@tcaswell matshow() trả về một AxesImage. Tôi tin rằng hàm set_aspect() chỉ có thể truy cập đối tượng Axes. Tôi không biết làm thế nào để có được đối tượng Axes từ AxesImage. – emily

Trả lời

1

Tôi đã kết thúc việc kết hợp các đề xuất của @tcaswell và @ lesnikow.

Nhận trục hiện tại để thiết lập tỉ lệ tự động đúng cách, tôi cũng chia ma trận thành ma trận nhỏ hơn:

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) 

ma trận của tôi là dài theo chiều dọc, vì vậy tôi cắt bởi hàng và bảo quản tất cả các cột trong nhỏ ma trận. Nếu ma trận của bạn dài theo chiều ngang, hãy lật chỉ mục như thế này my_matrix [:, nums]

Các vấn đề liên quan