python - seaborn 热图上的次 x 轴
问题描述
我有以下 DataFrame (称为hehe
):
11 22 33 44 55 66 77
s1 -3 5 7 8 -9 4 7
s2 4 3 8 1 4 4 -12
s3 1 -2 1 -4 8 8 -8
s4 -6 4 -4 9 -4 2 -6
然后是以下代码:
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(6,4), gridspec_kw={'width_ratios':(1,15)})
sns.heatmap(hehe, ax=ax2, cbar=False, cmap="coolwarm", linewidth=1, vmin=-25, vmax=25)
ax2.set_aspect("equal")
ax2.set_title("A", fontsize=20, pad=30)
plt.colorbar(plt.cm.ScalarMappable(cmap="coolwarm", norm=mpl.colors.Normalize(vmin=-25, vmax=25)), cax=ax1)
ax1.yaxis.set_ticks_position('left')
我想在热图顶部添加一个额外的 x 轴,这将帮助我用星号标记列(用于统计显着性)。假设它是:new_annotation = ["","","","","*","*",""]
我不知道如何实现这一点......我一直在玩复制轴,twiny()
但由于某种原因它对我不起作用:整个热图超出了界限。
解决方案
你可以这样做:
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
# hehe = pd.read_clipboard()
fig, (ax1, ax2) = plt.subplots(1,2, figsize=(6,4), gridspec_kw={'width_ratios':(1,15)})
sns.heatmap(hehe, ax=ax2, cbar=False, cmap="coolwarm", linewidth=1, vmin=-25, vmax=25)
# ax2.set_aspect("equal")
ax2.set_title("A", fontsize=20, pad=40)
ax3 = ax2.twiny()
# ax3.set_aspect("equal")
ax3.set_xlim([0,ax2.get_xlim()[1]])
ax3.set_xticks(ax2.get_xticks())
ax3.set_xticklabels(["","","","","*","*",""], fontsize=16)
ax3.tick_params(top=False)
ax3.spines['top'].set_visible(False)
ax3.spines['right'].set_visible(False)
ax3.spines['bottom'].set_visible(False)
ax3.spines['left'].set_visible(False)
plt.colorbar(plt.cm.ScalarMappable(cmap="coolwarm", norm=plt.Normalize(vmin=-25, vmax=25)), cax=ax1)
ax1.yaxis.set_ticks_position('left')
# plt.tight_layout()
# plt.show()
生成此图像:
推荐阅读
- python - 在 Maya (PyQt5) 中显示 QTreeWidget 分支线?
- django - AWS Elastic Beanstalk 上的 Celery 配置问题 - “进程没有配置更新”
- javascript - @RequestBody 空值(Spring boot 和 Vue JS)
- html - 如何更改 HTML 表单上日期输入的样式和格式
- javascript - 使用 Async/Await 使 API 获取“POST”的正确方法
- sql-server - SQL Server 排名
- java - 单击 BottomSheet RecyclerView 时为空 ArrayList
- google-maps - 用于谷歌地图标记的 SVG 图标
- primefaces - 如何使用 Chart.js 限制 X 轴上的数据点数量
- wordpress - Woocommerce 产品类别和子类别下拉选择