Python: 绘制大矩阵的热力图

4

我有一个大小为500 X 18904的大矩阵。

由于大部分值都是零,颜色条中的零值占据了主导地位,因此我无法清晰地看到模式。

为了更仔细地查看数据,我需要对图像的不同部分进行缩放。是否有可靠的方法使用颜色条来显示这些数据?

以下是我的代码和输出。

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
j = sio.loadmat('UV_matrix.mat')
k = j['UV']  
plt.imshow(k, aspect='auto')
plt.show()

输出结果如下图所示: enter image description here

你能忽略零值并使用最小值(而不是0)进行归一化吗? - Pedro
尝试直方图均衡化:http://scikit-image.org/docs/dev/auto_examples/plot_equalize.html - Chris Mueller
忽略了零。我只能看到小黑点。 - Rangooski
1个回答

8

我可以想到两种使用numpy数组的选项。

  1. Assuming your data is mostly higher than zero but there are a lot of zeros.:

    vmin = some_value_higher_than_zero
    plt.matshow(k,aspect='auto',vmin=vmin)
    
  2. Setting all zeros to NaNs. they are automatically left out.

    k[k==0.0]=np.nan
    plt.matshow(k,aspect='auto')
    

注意:imshow和matshow在此处均可使用。

另一个选择是当您的矩阵非常稀疏时,可以使用散点图。

x,y = k.nonzero()
plt.scatter(x,y,s=100,c=k[x,y]) #color as the values in k matrix

以防有人在这里寻求解决使用稀疏时间的图表问题,请对时间使用.values转换为浮点数,然后会自动转换为日期。(似乎输入参数x和y需要是相同的类型) - Worthy7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接