python - 在类似热图的图中写入值,但对于 seaborn 中的分类变量
问题描述
我在类似热图的图中绘制了一个数据框,我想写入单元格,但不是单元格的值,但我将值与条件进行比较并告诉它是哪种错误。
例如:
import pandas as pd
import seaborn as sns # matplotlib inline
import random
data = []
for i in range(10):
data.append([random.randrange(0, 11, 1) for _ in range(10)])
df = pd.DataFrame(data)
n = 10
fig, ax = plt.subplots(figsize = (12, 10))
cmap = ['#b3e6b3','#66cc66','#2d862d','#ffc299','#ff944d','#ff6600','#ccddff','#99bbff','#4d88ff','#0044cc','#002b80']
ax = sns.heatmap(df, cmap=cmap, linewidths = 0.005, annot = False)
plt.show()
运行此代码时我得到的是:
然后我将数据帧df
与某些条件进行比较并获得另外两个数据帧,例如:
condition1 = [['Error A'] + [np.nan]*9,
[np.nan]*6 + ['Error C'] + [np.nan]*3,
[np.nan]*10,
[np.nan]*7 + ['Error B'] + [np.nan]*2,
[np.nan]*2 + ['Error D'] + [np.nan]*3 + ['Error B'] + [np.nan]*3,
[np.nan]*10,
[np.nan]*3 + ['Error B'] + [np.nan]*6,
[np.nan]*7 + ['Error A'] + [np.nan]*2,
[np.nan]*10,
[np.nan]*10]
df_condition1 = pd.DataFrame(data = condition1)
condition2 = [[np.nan]*10,[np.nan]*10,
[np.nan]*10,[np.nan]*7 + ['Error C'] + [np.nan]*2,
[np.nan]*10,[np.nan]*10,[np.nan]*10,
[np.nan]*10,
[np.nan]*10,
[np.nan]*10]
df_condition2 = pd.DataFrame(data = condition2)
我想要的是在热图中显示这些数据框的值,如下所示:
我该怎么做?
解决方案
您可以构建错误文本并手动注释:
c1, c2 = df_condition1.notna(), df_condition2.notna()
df_condition1,df_condition2 = df_condition1.fillna(''), df_condition2.fillna('')
errors = np.select((c1&c2, c1, c2),
(df_condition1+'\n'+df_condition2, df_condition1, df_condition2),
'')
fig, ax = plt.subplots(figsize = (12, 10))
cmap = ['#b3e6b3','#66cc66','#2d862d','#ffc299','#ff944d','#ff6600','#ccddff','#99bbff','#4d88ff','#0044cc','#002b80']
ax = sns.heatmap(df, cmap=cmap, linewidths = 0.005, annot = False)
for r in range(errors.shape[0]):
for c in range(errors.shape[1]):
ax.text(c+0.5,r+0.5, errors[r,c],
va='center',ha='center',
fontweight='bold')
plt.show()
输出:
推荐阅读
- reactjs - 类型反应打字稿上不存在属性
- python - Plotly:如何创建奇数个子图?
- javascript - ReactJS - 如何从功能组件中的数组中删除项目?
- kotlin - 如何停止 IntelliJ IDEA 打印一个空的新行?
- python - 如何将 Treeview 列标题变成 Button?
- reverse-proxy - 如何在 Cloud Foundry 中使用 Træfik?
- android - 与颤振共享变量的最佳方法是什么?
- c# - NAudio 总是在两个通道上并行播放一个 mp3
- javascript - mark.js markRanges() 不尊重 HTML 元素
- python-3.x - 在熊猫数据框中检测星期六并修改行中的值