背景问题
最近在用seaborn 做热图时,做完热图后发现显示不全,热图的第一行和最后一行都只显示了一半。
因为自己做的热图加了许多参数设置,以为是哪个参数设置有问题,遂直接使用seaborn官网的代码。不过还是显示不全。
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
plt.savefig("test.png")
解决办法
在网上搜索了下,发现stackoverflow有这个问题。
这貌似是 matplotlib 3.1.1的一个bug吧,github上也有相关issue。我查了下我的matplotlib版本还真是3.1.1 。
这里照搬一下那个答案。
回退到matplotlib 3.1.0
用matplotlib 3.1.2 或更高的版本
手动设置heatmap limits (ax.set_ylim(...))
这里我用第三种方法测试,可以解决该问题:
import numpy as np; np.random.seed(0)
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
uniform_data = np.random.rand(10, 12)
ax = sns.heatmap(uniform_data)
ax.set_ylim([10, 0])
plt.savefig("test.png")