首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >seaborn热图中的离散图例

seaborn热图中的离散图例
EN

Stack Overflow用户
提问于 2016-08-08 18:31:41
回答 4查看 20.6K关注 0票数 24

我正在使用这里的数据来构建这个热图,它使用了seaborn和pandas。

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    import pandas
    import seaborn.apionly as sns

    # Read in csv file
    df_trans = pandas.read_csv('LUH2_trans_matrix.csv')

    sns.set(font_scale=0.8)
    cmap = sns.cubehelix_palette(start=2.8, rot=.1, light=0.9, as_cmap=True)
    cmap.set_under('gray')  # 0 values in activity matrix are shown in gray (inactive transitions)
    df_trans = df_trans.set_index(['Unnamed: 0'])
    ax = sns.heatmap(df_trans, cmap=cmap, linewidths=.5, linecolor='lightgray')

    # X - Y axis labels
    ax.set_ylabel('FROM')
    ax.set_xlabel('TO')

    # Rotate tick labels
    locs, labels = plt.xticks()
    plt.setp(labels, rotation=0)
    locs, labels = plt.yticks()
    plt.setp(labels, rotation=0)

    # revert matplotlib params
    sns.reset_orig()

正如你从csv文件中看到的,它包含3个离散值: 0,-1和1。我想要一个离散的图例而不是颜色条。将0标记为A,将-1标记为B,将1标记为C。如何做到这一点?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2016-08-11 04:12:16

当然,有不止一种方法可以做到这一点。在本例中,只需要三种颜色,我将通过创建LinearSegmentedColormap而不是使用cubehelix_palette来选择颜色。如果有足够的颜色可以保证使用cubehelix_palette,我会使用cbar_kws参数的boundaries选项在colormap上定义片段。无论采用哪种方法,都可以使用set_ticksset_ticklabels手动指定刻度。

下面的代码示例演示如何手动创建LinearSegmentedColormap,并包含有关在改用cubehelix_palette时如何指定边界的注释。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import matplotlib.pyplot as plt
import pandas
import seaborn.apionly as sns
from matplotlib.colors import LinearSegmentedColormap

sns.set(font_scale=0.8)
dataFrame = pandas.read_csv('LUH2_trans_matrix.csv').set_index(['Unnamed: 0'])

# For only three colors, it's easier to choose them yourself.
# If you still really want to generate a colormap with cubehelix_palette instead,
# add a cbar_kws={"boundaries": linspace(-1, 1, 4)} to the heatmap invocation
# to have it generate a discrete colorbar instead of a continous one.
myColors = ((0.8, 0.0, 0.0, 1.0), (0.0, 0.8, 0.0, 1.0), (0.0, 0.0, 0.8, 1.0))
cmap = LinearSegmentedColormap.from_list('Custom', myColors, len(myColors))

ax = sns.heatmap(dataFrame, cmap=cmap, linewidths=.5, linecolor='lightgray')

# Manually specify colorbar labelling after it's been generated
colorbar = ax.collections[0].colorbar
colorbar.set_ticks([-0.667, 0, 0.667])
colorbar.set_ticklabels(['B', 'A', 'C'])

# X - Y axis labels
ax.set_ylabel('FROM')
ax.set_xlabel('TO')

# Only y-axis labels need their rotation set, x-axis labels already have a rotation of 0
_, labels = plt.yticks()
plt.setp(labels, rotation=0)

plt.show()

票数 27
EN

Stack Overflow用户

发布于 2019-06-20 03:03:34

这里有一个基于其他答案的简单解决方案,它概括了3个类别,并使用字典(vmap)来定义标签。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import seaborn as sns
import numpy as np

# This just makes some sample 2D data and a corresponding vmap dict with labels for the values in the data
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
vmap = {i: chr(65 + i) for i in range(len(np.ravel(data)))}
n = len(vmap)

print(vmap)

cmap = sns.color_palette("deep", n)
ax = sns.heatmap(data, cmap=cmap)

# Get the colorbar object from the Seaborn heatmap
colorbar = ax.collections[0].colorbar
# The list comprehension calculates the positions to place the labels to be evenly distributed across the colorbar
r = colorbar.vmax - colorbar.vmin
colorbar.set_ticks([colorbar.vmin + 0.5 * r / (n) + r * i / (n) for i in range(n)])
colorbar.set_ticklabels(list(vmap.values()))

票数 13
EN

Stack Overflow用户

发布于 2016-08-11 01:39:09

我发现如果你使用ListedColormap,在seaborn中创建一个离散化的颜色条要容易得多。不需要定义自己的函数,只需添加几行代码即可自定义您的坐标轴。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pandas
import matplotlib.pyplot as plt
import seaborn as sns
from matplotlib.colors import ListedColormap


# Read in csv file
df_trans = pandas.read_csv('LUH2_trans_matrix.csv')

sns.set(font_scale=0.8)
# cmap is now a list of colors
cmap = sns.cubehelix_palette(start=2.8, rot=.1, light=0.9, n_colors=3)
df_trans = df_trans.set_index(['Unnamed: 0'])

# Create two appropriately sized subplots
grid_kws = {'width_ratios': (0.9, 0.03), 'wspace': 0.18}
fig, (ax, cbar_ax) = plt.subplots(1, 2, gridspec_kw=grid_kws)

ax = sns.heatmap(df_trans, ax=ax, cbar_ax=cbar_ax, cmap=ListedColormap(cmap),
                 linewidths=.5, linecolor='lightgray',
                 cbar_kws={'orientation': 'vertical'})

# Customize tick marks and positions
cbar_ax.set_yticklabels(['B', 'A', 'C'])
cbar_ax.yaxis.set_ticks([ 0.16666667, 0.5, 0.83333333])


# X - Y axis labels
ax.set_ylabel('FROM')
ax.set_xlabel('TO')

# Rotate tick labels
locs, labels = plt.xticks()
plt.setp(labels, rotation=0)
locs, labels = plt.yticks()
plt.setp(labels, rotation=0)

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

https://stackoverflow.com/questions/38836154

复制
相关文章
定期删除文件夹中的文件——C#
同样把保存天数存到ini文件中(存的是控件ridiobutton的索引值,具体操作点击这里),然后读出索引值再使用switch来解析索引值对应的天数
vv彭
2021/01/05
2.3K0
定期删除文件夹中的文件——C#
python强制删除文件夹_python删除文件夹下的文件保留但清空子文件夹
listdir = os.listdir(filepath) # 获取文件和子文件夹
全栈程序员站长
2022/08/30
4.4K0
强制删除文件 强制删除文件夹
重新命名文件名为 del.bat ,并选择文件类型为“所以文件”,最后保存文件
全栈程序员站长
2022/09/02
3.7K0
Stata | 删除文件夹下所有文件
在数据整理过程中,有时会生成一些临时的文件,数据整理完之后往往需要将其删除。本文就介绍下如何用 Stata 删除路径下的所有文件。
PyStaData
2020/07/21
4.9K0
java删除文件和文件夹[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131038.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/01
1.1K0
Java删除文件夹和文件
1.通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件,包括文件夹下的所有文件
OECOM
2020/07/01
1.5K0
如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹
有些爱学习的用户会去操弄linux软件程序,在操作linux的过程中,有时候要删除一个文件夹,往往会提示次此文件非空,没法删除,这对于刚接触的用户来说无疑是一个巨大的困难,为此,小编这就来跟大家分享linux删除文件夹的操作方案。
全栈程序员站长
2022/09/14
37.5K0
如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹
Java 删除文件以及文件夹删除不了的问题
今天在编写一个项目,流程是先创建一个临时文件夹存放生成的文件,再经过压缩导出,待导出成功后删除临时文件夹,但是怎么也删除不了,还以为是写的删除方法有问题,找来找去,试了很多方法也删除不了
全栈程序员站长
2022/06/26
2.3K0
Java 删除文件以及文件夹删除不了的问题
删除上传 github 中的 .idea 文件夹
因为没有配置好 .gitignore 文件,把 .idea 文件夹上传到github 了。在网上发现这篇博文,很好的解决了我的问题。其实很简单,输入命令删除 idea 的 -cached 。删除缓存也不会把本地的 .idea 删除。具体代码如下
归思君
2023/10/16
3690
删除LDSGameMaster文件夹[通俗易懂]
1.在网上搜在注册表上搜LDSGameMaster相关文件,删除——刷新——删除,直到全部删除完,重启删除,还是不行。 2.在LDSGameMaster文件夹里的后缀为sys文件,修改名称,在其后边加一个apk,然后重启电脑,直接删除然后就可以了。 不知道有没有跟第一步有关系。
全栈程序员站长
2022/07/01
2.8K0
Python 删除文件夹
path下的子文件夹名称为日期,如20180801,该方法的功能为删除duration天数以外的文件夹,保留近duration天的文件夹
week
2018/08/24
3K0
java删除文件夹
想删除本地一个项目目录,结果windows说路径太长,不能删除。于是试了试java删除。一切ok。以后一定要抓紧时间学python。 /** * Created by rmiao on 4/21/2016. */ public class TestDel { public static void main(String[] args) throws IOException { String dest = "D:\\perforce\\workspace2\\EPC";
Ryan-Miao
2018/03/13
2K0
SHFileOperation删除文件夹
wFunc := FO_DELETE; //FO_COPY,FO_RENAME,FO_MOVE,FO_DELETE
全栈程序员站长
2022/09/09
1.2K0
基础:在 Linux 终端中删除文件和文件夹
要想使用图形化界面删除计算机上的文件,你可能会直接将文件或文件夹拖拽到 “垃圾箱” 或 “回收站”。或者你也可以选择要删除的文件或文件夹,右键单击并选择 删除。
用户1880875
2021/09/07
3.7K0
Linux 删除文件夹和文件的命令
-r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思
周小董
2019/03/25
7.9K0
Linux 删除文件夹和文件的命令
linux删除目录很简单,很多人还是习惯用rmdir,不过一旦目录非空,就陷入深深的苦恼之中,现在使用rm -rf命令即可。 直接rm就可以了,不过要加两个参数-rf 即:rm -rf 目录名字 -r 就是向下递归,不管有多少级目录,一并删除 -f 就是直接强行删除,不作任何提示的意思
全栈程序员站长
2022/07/07
6.1K0
hdfs创建删除文件和文件夹
在 hadoop 中,基于 Linux 命令可以给 hdfs 创建文件和文件夹,或者删除文件和文件夹
机器学习和大数据挖掘
2019/07/02
16.5K1
如何使用Python选择性地删除文件夹中的文件?
问题描述:在一个文件夹中,有着普通文件以及文件夹,那么我们如何做到删除全部文件夹而不删除文件呢?
活用数据
2019/06/03
13.3K0
如何使用Python选择性地删除文件夹中的文件?
iOS 创建文件夹,删除文件夹,对文件夹重命名的操作
+ (void)createFolder:(NSString )folderName { NSString imageDir = [NSString stringWithFormat:@"%@/Documents/%@", NSHomeDirectory(),folderName]; NSLog(@"HomeDir: %@",imageDir); BOOL isDir = NO; NSFileManager *fileManager = [NSFileManager defa
大师级码师
2021/10/29
2.8K0
java强制删文件夹_Java 删除文件夹 和 文件 集合
《此文拷贝自http://kxjhlele.iteye.com/blog/323657》
全栈程序员站长
2022/09/01
1.5K0

相似问题

Powershell拆分

48

PowerShell拆分“(”)-支撑

10

拆分、选择、加入PowerShell

30

使用powershell拆分CSV

30

拆分路径powershell

111
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文