背景問題
最近在用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")