如何从 Pandas Dataframe 在 Matplotlib 热图中创建预定义的颜色范围
How to create predefined color range in Matplotlib heat map from a Pandas Dataframe
我有以下数据框:
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 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
.