如何在Matplotlib热图中从Pandas数据框架中创建预定义的颜色范围[英] How to create predefined color range in Matplotlib heat map from a Pandas Dataframe

本文是小编为大家收集整理的关于如何在Matplotlib热图中从Pandas数据框架中创建预定义的颜色范围的处理方法,想解了如何在Matplotlib热图中从Pandas数据框架中创建预定义的颜色范围的问题怎么解决?如何在Matplotlib热图中从Pandas数据框架中创建预定义的颜色范围问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我有以下数据框:

import pandas as pd
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
data= [[ 1, 0.3, 2.1, 1.3],[ 2.5, 1, 1, 0.77],[ 0.0, 1, 2, 1],[ 0, 3.2, 1, 1.2],[ 10, 1, 1, 1]]
df = pd.DataFrame(data, index=Index, columns=Cols)

看起来像这样:

In [25]: df
Out[25]:
        A    B    C     D
aaa   1.0  0.3  2.1  1.30
bbb   2.5  1.0  1.0  0.77
ccc   0.0  1.0  2.0  1.00
ddd   0.0  3.2  1.0  1.20
eee  10.0  1.0  1.0  1.00

我想做的是创建具有以下条件的热图:

  • 价值
  • 1:蓝色
  • 值 == 1:白色
  • 1<价值<2:浅红色
  • 值 >=2:深红色

理想情况下,颜色必须是渐变的.这是我失败的糟糕尝试:

from matplotlib import colors
cmap = colors.ListedColormap(['darkblue','blue','white','pink','red'])
bounds=[-0.5, 0.5, 1.5, 2.5, 3.5]
norm = colors.BoundaryNorm(bounds, cmap.N)
heatmap = plt.pcolor(np.array(data), cmap=cmap, norm=norm)
plt.colorbar(heatmap, ticks=[0, 1, 2, 3])

产生这个情节:

在此处输入图片描述

正确的做法是什么?

推荐答案

要获得渐变色,你可以这样做:

import matplotlib.pyplot as plt
# Builtin colourmap "seismic" has the blue-white-red
#   scale you want
plt.pcolor(np.array(data), cmap=plt.cm.seismic, vmin=0, vmax=2)
plt.colorbar()
plt.show()

这里我设置了 vmin 和 vmax 以便它们等距在 1.0 的白色值附近,不幸的是我认为这意味着任何高于 2.0 的值都不会比这些值更暗在 2.0.通过选择更宽的范围,您可能会获得更好的结果范围,即使这意味着规模包括负值,例如vmin=-2, vmax=4.

在此处输入图片描述

本文地址:https://www.itbaoku.cn/post/1727812.html