python - 我正在使用 seaborn 并有一个热图。如何使用离散范围内的特定颜色创建颜色图?
问题描述
我正在制作一个 seaborn 热图,我想用这些范围指定一个离散的颜色图:
under 40 = dark green
40 - 70 = light green
70 - 130 = white
130 - 165 = light red
165 and over = dark red
我制作了一个具有正确边界的颜色条:
fig, ax = plt.subplots(figsize=(6, 1))
fig.subplots_adjust(bottom=0.5)
cmap = mpl.colors.ListedColormap(['darkolivegreen', 'yellowgreen', 'white', 'lightcoral','darkred'])
#cmap.set_over('0.25')
#cmap.set_under('0.75')
bounds = [0, 40, 70, 130,165,310]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
cb2 = mpl.colorbar.ColorbarBase(ax, cmap=cmap,
norm=norm,
#boundaries=[0] + bounds + [13],
extend='both',
ticks=bounds,
spacing='proportional',
orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
我现在的问题是如何将这个带有边界的颜色条定义为我的 seaborn 热图的新颜色图?
我试过这个,但边界不存在,颜色图被均匀调整,而不是使用特定的边界。
ax = sns.heatmap(selected,cmap=cmap)
plt.ylabel('Patient')
plt.xlabel('Gene')
#ax.set_yticks(np.arange(0,61,1))
plt.show()
如何根据我定义的新颜色条获得正确的颜色图?
解决方案
您可以在绘制热图后尝试使用plt.colorbar
绘制颜色条
fig, ax = plt.subplots(figsize=(6, 9))
fig.subplots_adjust(bottom=0.5)
# define the color map
cmap = mpl.colors.ListedColormap(['darkolivegreen', 'yellowgreen', 'white', 'lightcoral','darkred'])
bounds = [0, 40, 70, 130,165,310]
norm = mpl.colors.BoundaryNorm(bounds, cmap.N)
# plot heatmap with `imshow`
cb = ax.imshow(selected,cmap=cmap, norm=norm)
# plot colorbar
cb2 = plt.colorbar(cb, #boundaries=[0] + bounds + [13],
extend='both',
ticks=bounds,
spacing='proportional',
orientation='horizontal')
cb2.set_label('Discrete intervals, some other units')
fig.show()
输出:
推荐阅读
- angular - 我的 Angular7 应用程序中的 HttpInterceptor 在错误期间没有触发,我的代码有什么问题?
- bash - 找出调用(shell)脚本的内容
- javascript - 应用从后台移到前台时触发哪个 JS 事件
- c - 如何将字符串值添加到结构中?
- android - public void setOnClickListener(@Nullable OnClickListener 1),为什么引用名称是数字“1”?
- python - 未在 Airflow 单元测试中呈现的模板
- python - 在 travis CI 中更新 SQLite
- ios - 添加 Xcode 目标
- office-js - 在 OWA 与桌面客户端或 SSO 登录前/后登录时,用户的邮箱 API 返回不同的电子邮件
- javascript - 为什么 IE11 在其他浏览器正常运行时会生成 javascript 错误 SCRIPT16389: Incorrect function on this page?