pandas - 在熊猫数据框热图显示中使用中心发散颜色图
问题描述
我想使用发散的颜色图为熊猫数据框的背景着色。使这比人们想象的更棘手的方面是居中。在下面的示例中,使用了红色到蓝色的颜色图,但颜色图的中间不用于零附近的值。如何创建一个居中的背景颜色显示,其中零是白色,所有负片都是红色调,所有正片都是蓝色调?
import pandas as pd
import numpy as np
import seaborn as sns
np.random.seed(24)
df = pd.DataFrame()
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4)*10, columns=list('ABCD'))],
axis=1)
df.iloc[0, 2] = 0.0
cm = sns.diverging_palette(5, 250, as_cmap=True)
df.style.background_gradient(cmap=cm).set_precision(2)
上面显示中的零具有红色色调,最接近白色背景的数字用于负数。
解决方案
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import colors
np.random.seed(24)
df = pd.DataFrame()
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4)*10, columns=list('ABCD'))],
axis=1)
df.iloc[0, 2] = 0.0
cm = sns.diverging_palette(5, 250, as_cmap=True)
def background_gradient(s, m, M, cmap='PuBu', low=0, high=0):
rng = M - m
norm = colors.Normalize(m - (rng * low),
M + (rng * high))
normed = norm(s.values)
c = [colors.rgb2hex(x) for x in plt.cm.get_cmap(cmap)(normed)]
return ['background-color: %s' % color for color in c]
even_range = np.max([np.abs(df.values.min()), np.abs(df.values.max())])
df.style.apply(background_gradient,
cmap=cm,
m=-even_range,
M=even_range).set_precision(2)
推荐阅读
- php - 将数据拆分为 2 个 div 的最简单方法是什么?
- java - Java 8:Stream.filter 未按预期运行
- python - 将保存在 txt 文件中的字典列表转换为数据框
- javascript - 过滤一个对象数组并返回一个对象数组,其中某个键的值出现 x 次
- python - 在变量python中更改变量的值
- java - 序列化列表产生的“项目”节点
- javascript - 从缩略图切换新图像后,缩放仍显示原始图像
- python - 为什么将“and”放入python时返回最后一个数字?
- perl - 如何自动重新加载我的 Mojolicious 网站?
- javascript - Azure 表按分区键值过滤