我有一个从pandas数据帧生成的clustermap.其中两列用于生成簇图,我需要使用第三列使用sns.palplot(sns.light_palette('red'))
调色板生成col_colors栏(值将为0 - 1,浅 - 深色).
伪代码看起来像这样:
df=pd.DataFrame(input, columns = ['Source', 'amplicon', 'coverage', 'GC']) tiles = df.pivot("Source", "amplicon", "coverage") col_colors = [values from df['GC']] sns.clustermap(tiles, vmin=0, vmax=2, col_colors=col_colors)
我正在努力寻找有关如何设置col_colors的详细信息,以便将正确的值链接到相应的tile.一些方向将不胜感激.
使用示例数据可以更容易地解释此示例.我不知道您的数据是什么样的,但是说您有一堆GC内容测量值例如:
import seaborn as sns import numpy as np import pandas as pd data = {'16S':np.random.normal(.52, 0.05, 12), 'ITS':np.random.normal(.52, 0.05, 12), 'Source':np.random.choice(['soil', 'water', 'air'], 12, replace=True)} df=pd.DataFrame(data) df[:3] 16S ITS Source 0 0.493087 0.460066 air 1 0.607229 0.592945 water 2 0.577155 0.440726 water
所以数据是GC内容,然后有一个描述源的列.假设我们想要绘制GC内容的聚类地图,我们使用该Source
列来定义网络
#create a color palette with the same number of colors as unique values in the Source column network_pal = sns.light_palette('red', len(df.Source.unique())) #Create a dictionary where the key is the category and the values are the #colors from the palette we just created network_lut = dict(zip(df.Source.unique(), network_pal)) #get the series of all of the categories networks = df.Source #map the colors to the series. Now we have a list of colors the same #length as our dataframe, where unique values are mapped to the same color network_colors = pd.Series(networks).map(network_lut) #plot the heatmap with the 16S and ITS categories with the network colors #defined by Source column sns.clustermap(df[['16S', 'ITS']], row_colors=network_colors, cmap='BuGn_r')
基本上上面的代码大部分都是创建一个颜色矢量,它Source
与数据帧的列相反.你当然可以手动创建它,其中列表中的第一个颜色将映射到数据框中的第一行,第二个颜色将映射到第二行,依此类推(当你绘制它时,这个顺序会改变),然而,这将是很多工作.我使用了红色调色板,因为这是你在问题中提到的,尽管我可能会建议使用不同的调色板.我按行着色,但你可以为列做同样的事情.希望这可以帮助!