第一次写这个,不知道发出来长什么样
问题描述
我根据pandas里的数据生成了一个矩阵,想用这个矩阵来绘制一个热力图,如下图这样
但是我想去掉里面这些太多不需要的‘0’
生成矩阵
这个当然不是用来教画图的,只是简单说一下我当时的经历
我用如下代码生成一个矩阵阵,这个矩阵就和上图看到的一样,
o_matrix = np.zeros(matrix_shape,dtype=np.int)
o_matrix[temp['SLATCOL'],temp['SLONCOL']] = temp['VehicleNum']
生成热力图
sns.heatmap(o_matrix,
ax = ax,
annot = True,
mask=o_matrix < 1, # 小于1的元素会不显示
cbar=True,cbar_kws={"shrink": 0.6},
linewidths = .2,
xticklabels = True,
yticklabels = True,
square = True,
cmap = "Purples").invert_yaxis()
问题来了
因为当我在热力图那段代码里加了有注释的那一行(也就是mask那一行)后就报错了
所以我以为问题是那个参数传的有问题,百度了一下发现应该就是这样写的,问题应该不在这。
问题原因
因为我没搜到解决方法,我就自己仔细看了一下,它的大意应该是不能将Nan填到dtype int32的numpy矩阵里。然后我估计问题应该是出在了矩阵的dtype上,因为我上面在定义矩阵时用了dtype=np.int这一参数,我的目的是将里面的数全转换成整型,这样里面的每个元素后面就不会带小数点了,下面是加上这一句和不加的区别
本来只是为了好看点,但没想到就这又困扰了我两个小时,真是划不来。
问题解决
所以我把那一段参数删了一下就好了,也就是现在这样
o_matrix = np.zeros(matrix_shape) #,dtype=np.int
o_matrix[temp['SLATCOL'],temp['SLONCOL']] = temp['VehicleNum']
然后再生成热力图,就基本达到我的要求了,里面的0都没了
上面是我学数据处理时在网上下的数据,当然这都不重要,重要的是我发了第一篇博客