gpt4 book ai didi

python - 需要将pandas相关高亮表(cmap Matplotlib)保存为png图像

转载 作者:行者123 更新时间:2023-12-04 01:32:11 28 4
gpt4 key购买 nike

使用此代码生成相关表:

df1.drop(['BC DataPlus', 'AC Glossary'], axis=1).corr(method='pearson').style.format("{:.2}").background_gradient(cmap=plt.get_cmap('coolwarm'), axis=1) 

这是生成的表:
Correlation Table

我找不到任何方法将此表另存为图像。谢谢你。

最佳答案

如果从字面上看,您提出的问题很难回答。
难点在于df.style.render()生成 HTML,然后将其发送到浏览器以呈现为图像。结果在所有浏览器中也可能不完全相同。

Python 不直接参与图像的生成。所以没有
直接的基于 Python 的解决方案。

然而,如何将 HTML 转换为 png 的问题
was raised关于 Pandas 开发者的
github页面和建议
答案是 use phantomjs .其他方式(我没有测试过)可能是使用
webkit2png 或者
GrabzIt .

然而,如果我们放松对问题的解释,我们就可以避免大部分困难。而不是试图产生由 df.style 生成的精确图像(对于特定浏览器),
我们可以很容易地使用 seaborn 生成类似的图像:

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.random((6, 4)), columns=list('ABCD'))
fig, ax = plt.subplots()
sns.heatmap(df.corr(method='pearson'), annot=True, fmt='.4f',
cmap=plt.get_cmap('coolwarm'), cbar=False, ax=ax)
ax.set_yticklabels(ax.get_yticklabels(), rotation="horizontal")
plt.savefig('result.png', bbox_inches='tight', pad_inches=0.0)

enter image description here

如果你不想添加 seaborn 依赖,你可以 use matplotlib directly虽然它需要多几行代码:
import colorsys
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame(np.random.random((6, 4)), columns=list('ABCD'))
corr = df.corr(method='pearson')

fig, ax = plt.subplots()
data = corr.values
heatmap = ax.pcolor(data, cmap=plt.get_cmap('coolwarm'),
vmin=np.nanmin(data), vmax=np.nanmax(data))
ax.set_xticks(np.arange(data.shape[1])+0.5, minor=False)
ax.set_yticks(np.arange(data.shape[0])+0.5, minor=False)
ax.invert_yaxis()
row_labels = corr.index
column_labels = corr.columns
ax.set_xticklabels(row_labels, minor=False)
ax.set_yticklabels(column_labels, minor=False)

def _annotate_heatmap(ax, mesh):
"""
**Taken from seaborn/matrix.py**
Add textual labels with the value in each cell.
"""
mesh.update_scalarmappable()
xpos, ypos = np.meshgrid(ax.get_xticks(), ax.get_yticks())
for x, y, val, color in zip(xpos.flat, ypos.flat,
mesh.get_array(), mesh.get_facecolors()):
if val is not np.ma.masked:
_, l, _ = colorsys.rgb_to_hls(*color[:3])
text_color = ".15" if l > .5 else "w"
val = ("{:.3f}").format(val)
text_kwargs = dict(color=text_color, ha="center", va="center")
# text_kwargs.update(self.annot_kws)
ax.text(x, y, val, **text_kwargs)

_annotate_heatmap(ax, heatmap)
plt.savefig('result.png', bbox_inches='tight', pad_inches=0.0)

关于python - 需要将pandas相关高亮表(cmap Matplotlib)保存为png图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51347398/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com