Python使用matplotlib绘制大型矩阵

Python使用matplotlib绘制大型矩阵,python,matplotlib,matrix,out-of-memory,large-data,Python,Matplotlib,Matrix,Out Of Memory,Large Data,我正在尝试绘制一个包含2000列和200000行的矩阵。当矩阵较小时,我可以使用 matshow(my_matrix) show() 但是,当向my_矩阵中添加更多行时,图形会变得非常窄,因为行远多于列,因此放大时会丢失精度。我可以使矩阵图滚动吗?如果不是,我如何在不损失精度的情况下可视化这种矩阵 我还尝试调用savefig('filename',dpi=300)来保存图像而不丢失太多精度,但当矩阵较大时,它会抛出MemoryError。非常感谢 我最终采纳了@tcaswell和@lesnik

我正在尝试绘制一个包含2000列和200000行的矩阵。当矩阵较小时,我可以使用

matshow(my_matrix)
show()
但是,当向my_矩阵中添加更多行时,图形会变得非常窄,因为行远多于列,因此放大时会丢失精度。我可以使矩阵图滚动吗?如果不是,我如何在不损失精度的情况下可视化这种矩阵


我还尝试调用savefig('filename',dpi=300)来保存图像而不丢失太多精度,但当矩阵较大时,它会抛出MemoryError。非常感谢

我最终采纳了@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]

可能对你的需要来说太简单了,但是你有没有尝试过将你的大矩阵拆分成几个部分,然后在每个部分上调用matshow?
ax。set_aspect('auto')
可以解决纵横比问题,但是你的像素将是矩形而不是正方形。我已经做了2K×15K的事情,但是它开始推动MPL可以做的限制(在C++光栅化代码中有一些硬编码的32位整数)。@ TCASWORD MatSUM()返回AxESIMAGE。我相信set_aspect()函数只能由Axis对象访问。我不知道如何从AxeImage中获取Axes对象。我最终采纳了您的建议。通过调用AX= PLT.gCa()获取当前轴,然后Ax.StIdStand(Auto'),我也把矩阵分解成更小的矩阵。Hi @艾米丽-考虑添加一个你自己的问题的答案,这样将来同一问题的人可以很容易地找到它。