有不止一种方法可以做到这一点。
最简单的方法是传入一个布尔数组pcolor
然后选择绿色高、红色低的颜色图。
例如:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
data= np.random.random((5, 4))
df = pd.DataFrame(data, index=Index, columns=Cols)
plt.pcolor(df > 0.5, cmap='RdYlGn')
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.show()
或者,正如 @Cyber 提到的,您可以根据您的值制作双色颜色图并使用它:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.colors as mcolors
Index= ['aaa', 'bbb', 'ccc', 'ddd', 'eee']
Cols = ['A', 'B', 'C', 'D']
data= np.random.random((5, 4))
df = pd.DataFrame(data, index=Index, columns=Cols)
# Values from 0-0.5 will be red and 0.5-1 will be green
cmap, norm = mcolors.from_levels_and_colors([0, 0.5, 1], ['red', 'green'])
plt.pcolor(df, cmap=cmap, norm=norm)
plt.yticks(np.arange(0.5, len(df.index), 1), df.index)
plt.xticks(np.arange(0.5, len(df.columns), 1), df.columns)
plt.show()
(颜色差异只是因为“RdYlGn”颜色图使用较深的绿色和红色作为其端点。)
顺便说一句,它的使用速度也快得多pcolormesh
为此,而不是pcolor
。对于小型阵列,不会产生显着差异,但对于大型阵列pcolor
速度太慢。imshow
如果您不介意光栅输出,则速度甚至更快。使用imshow(data, interpolation='nearest', aspect='auto', origin='lower')
匹配默认值pcolor
and pcolormesh
.