Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何从数据框在Matplotlib热图中创建预定义的颜色范围_Python_Pandas_Matplotlib - Fatal编程技术网

Python 如何从数据框在Matplotlib热图中创建预定义的颜色范围

Python 如何从数据框在Matplotlib热图中创建预定义的颜色范围,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有以下数据框: 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) 看起

我有以下数据框:

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


要获得渐变颜色,您可以执行以下操作:

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