首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python :修改heatmap图例

Python :修改heatmap图例
EN

Stack Overflow用户
提问于 2016-05-05 05:27:45
回答 1查看 7.4K关注 0票数 3

我刚刚创建了以下热图。

在图例中,最大值(vmax)设置为0.10。我这么做是因为我想避免渲染更多的“极端”价值观。但在传说中,是否可以修改它并编写">= 0.10“,从而添加”更大或等于?“?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-05 15:48:51

因此,这是一个相当麻烦的解决方案,并且认为几乎肯定有一种更明智的方法来做到这一点,并希望@mwaskom能够在其中进行权衡,但我能够访问这个颜色栏对象,方法是在调用heatmap函数时显式地将它作为参数传递,如下所示:

代码语言:javascript
复制
import seaborn as sns; sns.set()
import numpy as np; np.random.seed(0)
from matplotlib import pyplot as plt

fig, ax = plt.subplots()
fig.set_size_inches(14, 7)
uniform_data = np.random.rand(10, 12)
cbar_ax = fig.add_axes([.92, .3, .02, .4])
sns.heatmap(uniform_data, ax=ax, cbar_ax=cbar_ax)

制作这一文件:

我在ax.get_yticks()里找到了滴答

代码语言:javascript
复制
In [41]: cbar_ax.get_yticks()
Out [41]: array([ 0.19823662,  0.39918933,  0.60014204,  0.80109475])

标签本身是字符串:

代码语言:javascript
复制
In [44]: [x.get_text() for x in cbar_ax.get_yticklabels()]
Out [44]: [u'0.2', u'0.4', u'0.6', u'0.8']

因此,我们可以简单地更改最后一个元素的yticklabels中的文本对象,并希望得到一个修正的轴,下面是我的最后代码:

代码语言:javascript
复制
fig, ax = plt.subplots()
fig.set_size_inches(14, 7)
uniform_data = np.random.rand(10, 12)
#add an axis to our plot for our cbar, tweak the numbers there to play with the sizing. 
cbar_ax = fig.add_axes([.92, .3, .02, .4])
#assign the cbar to be in that axis using the cbar_ax kw
sns.heatmap(uniform_data, ax=ax, cbar_ax=cbar_ax)

#hacky solution to change the highest (last) yticklabel
changed_val = ">= " + cbar_ax.get_yticklabels()[-1].get_text()

#make a new list of labels with the changed value.
labels = [x.get_text() for x in cbar_ax.get_yticklabels()[:-1]] + [changed_val]

#set the yticklabels to the new labels we just created. 
cbar_ax.set_yticklabels(labels)

它产生:

有关这个主题的一些额外资源可以找到here,在这里我从mwaskom的回复中提取了一些信息。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37043047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档