<p>如果您的主要目标是可视化相关矩阵,而不是创建一个图本身,那么方便的<code>pandas</code><a href="https://pandas.pydata.org/pandas-docs/stable/style.html" rel="noreferrer">styling options</a>是一个可行的内置解决方案:</p>
<pre><code>import pandas as pd
import numpy as np
rs = np.random.RandomState(0)
df = pd.DataFrame(rs.rand(10, 10))
corr = df.corr()
corr.style.background_gradient(cmap='coolwarm')
# 'RdBu_r' & 'BrBG' are other good diverging colormaps
</code></pre>
<p><a href="https://i.stack.imgur.com/jpuCH.png" rel="noreferrer"><img src="https://i.stack.imgur.com/jpuCH.png" alt="enter image description here"/></a></p>
<p>注意,这需要在支持呈现HTML的后端,比如JupyterLab笔记本。(深色背景上的自动亮文本来自现有的PR,而不是最新发布的版本,<code>pandas</code>0.23)。</p>
<hr/>
<h2>造型</h2>
<p>您可以轻松限制数字精度:</p>
<pre><code>corr.style.background_gradient(cmap='coolwarm').set_precision(2)
</code></pre>
<p><a href="https://i.stack.imgur.com/9QmQf.png" rel="noreferrer"><img src="https://i.stack.imgur.com/9QmQf.png" alt="enter image description here"/></a></p>
<p>或者,如果您更喜欢不带注释的矩阵,请完全去掉这些数字:</p>
<pre><code>corr.style.background_gradient(cmap='coolwarm').set_properties(**{'font-size': '0pt'})
</code></pre>
<p><a href="https://i.stack.imgur.com/HhtXN.png" rel="noreferrer"><img src="https://i.stack.imgur.com/HhtXN.png" alt="enter image description here"/></a></p>
<p>样式文档还包括更高级样式的说明,例如如何更改鼠标指针悬停在其上的单元格的显示。要保存输出,可以通过附加<code>render()</code>方法返回HTML,然后将其写入文件(或者只为不太正式的目的截图)。</p>
<hr/>
<h2>时间比较</h2>
<p>在我的测试中,<code>style.background_gradient()</code>比<code>plt.matshow()</code>快4倍,比<code>sns.heatmap()</code>快120倍,矩阵为10x10。不幸的是,它的伸缩性不如<code>plt.matshow()</code>好:对于100x100矩阵,这两种方法花费的时间差不多,而对于1000x1000矩阵,<code>plt.matshow()</code>则要快10倍。</p>
<hr/>
<h2>保存</h2>
<p>有几种可能的方法可以保存样式化的数据帧:</p>
<ul>
<li>通过附加<code>render()</code>方法返回HTML,然后将输出写入文件。</li>
<li>通过附加<code>to_excel()</code>方法,保存为具有条件格式的<code>.xslx</code>文件。</li>
<li><a href="https://stackoverflow.com/a/50097322/2166823">Combine with imgkit to save a bitmap</a></li>
<li>截图(不太正式)。</li>
</ul>
<hr/>
<h2>熊猫更新>;=0.24</h2>
<p>通过设置<code>axis=None</code>,现在可以根据整个矩阵而不是每列或每行计算颜色:</p>
<pre><code>corr.style.background_gradient(cmap='coolwarm', axis=None)
</code></pre>
<p><a href="https://i.stack.imgur.com/iZ6Vs.png" rel="noreferrer"><img src="https://i.stack.imgur.com/iZ6Vs.png" alt="enter image description here"/></a></p>