python - 如何在 Seaborn Heatmap 单元格中显示多个注释?
问题描述
我希望 seaborn 热图在热图的每个单元格中显示多个值。为了清楚起见,这是我想看到的手动示例:
data = np.array([[0.000000,0.000000],[-0.231049,0.000000],[-0.231049,0.000000]])
labels = np.array([['A\nExtra Stuff','B'],['C','D'],['E','F']])
fig, ax = plt.subplots()
ax = sns.heatmap(data, annot = labels, fmt = '')
这里作为一个示例,让 seaborn.heatflightsRoundUp
在单元格中显示值。
import matplotlib.pyplot as plt
import seaborn as sns
sns.set()
def RoundUp(x):
return int(np.ceil(x/10)*10)
# Load the example flights dataset and conver to long-form
flights_long = sns.load_dataset("flights")
flights = flights_long.pivot("month", "year", "passengers")
flightsRoundUp = flights.applymap(RoundUp)
# Draw a heatmap with the numeric values in each cell
f, ax = plt.subplots(figsize=(9, 6))
sns.heatmap(flights, annot=flightsRoundUp, fmt="", linewidths=.5, ax=ax)
显示所有单元格flightsRoundUp
的最佳方式是什么?flights
类似于上面的第一个手动示例,但是对于所有单元格都以类似矢量的方式...
解决方案
Rotail 的回答对我不起作用,应用该 lambda 函数时出现错误。
但是,我找到了一个解决方案,该解决方案利用了 seaborn 将连续数字相互叠加的事实。您所要做的就是使用一次调用 heatmap 来建立图形,然后调用每个注释。使用 annot_kws arg 确保文本不会相互覆盖。
X = pd.DataFrame({'a':[1, 2, 3], 'b':[4, 5, 6]})
Y = pd.DataFrame({'A':['A', 'B', 'C'], 'B':['E', 'F', 'G']})
Z = pd.DataFrame({'A':['(Extra Stuff)', '(Extra Stuff)', '(Extra Stuff)'], 'B':['(Extra Stuff)', '(Extra Stuff)', '(Extra Stuff)']})
sns.heatmap(X, annot=False)
sns.heatmap(X, annot=Y, annot_kws={'va':'bottom'}, fmt="", cbar=False)
sns.heatmap(X, annot=Z, annot_kws={'va':'top'}, fmt="", cbar=False)
推荐阅读
- python - 尝试使用 stockstats 来计算 rsi,出现错误“TypeError:列表索引必须是整数或切片,而不是 str”
- android - Xamarin Forms 连接麦克风以从 Azure 检索翻译语音 api 的数据
- android - 具有 Viewmodel 的 Android 上的 Headless Activity
- android - 以编程方式获取辅助功能显示尺寸 Android
- r - 对因子水平感到困惑并与 dplyr 发生变异
- bazel - Bazel 方面如何从 java_library 目标获取源文件列表?
- java - 无法在 eclipse photon 上安装 windowbuilder 插件
- image - Flutter pdf生成太慢,图像太慢
- c++ - 使用 stod() 转换小数点后带有字母的字符串时也不例外
- cassandra - Cassandra 表中的分布式行级锁定或实现更高的一致性