- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用seaborn clustermap函数,我想制作多个图,其中单元格大小完全相同。轴标签的大小也应该相同。这意味着图形大小和纵横比需要改变,其余部分需要保持不变。
import pandas
import seaborn
import numpy as np
dataFrameA = pd.DataFrame([ [1,2],[3,4] ])
dataFrameB = pd.DataFrame( np.arange(3*6).reshape(3,-1))
然后决定 clustermap 本身需要有多大,大致如下:
dpi = 72
cellSizePixels = 150
这决定了 dataFrameA 应该是 300 x 300 像素。我认为这些需要转换为图形的大小单位,即每像素的 cellSizePixels/dpi 单位。因此,对于 dataFrameA,热图大小约为 2.01 英寸。这里我引入一个问题:热图周围有一些东西,也会占用一些空间,而且我不知道这些东西到底会占用多少空间。
我尝试使用上面的公式猜测图像大小来参数化热图函数:
def fixedWidthClusterMap( dpi, cellSizePixels, dataFrame):
clustermapParams = {
'square':False # Tried to set this to True before. Don't: the dendograms do not scale well with it.
}
figureWidth = (cellSizePixels/dpi)*dataFrame.shape[1]
figureHeight= (cellSizePixels/dpi)*dataFrame.shape[0]
return sns.clustermap( dataFrame, figsize=(figureWidth,figureHeight), **clustermapParams)
fixedWidthClusterMap(dpi, cellSizePixels, dataFrameA)
plt.show()
fixedWidthClusterMap(dpi, cellSizePixels, dataFrameB)
plt.show()
我的问题:如何获得与我想要的尺寸完全相同的方形单元格?
最佳答案
这有点棘手,因为有很多事情需要考虑,最后,这取决于您需要的尺寸有多“精确”。
查看 the code for clustermap
热图部分设计为与用于树状图的轴相比具有 0.8 的比率。但我们还需要考虑用于放置轴的边距。如果知道热图轴的大小,则应该能够计算出所需的图形大小,从而产生正确的形状。
dpi = matplotlib.rcParams['figure.dpi']
marginWidth = matplotlib.rcParams['figure.subplot.right']-matplotlib.rcParams['figure.subplot.left']
marginHeight = matplotlib.rcParams['figure.subplot.top']-matplotlib.rcParams['figure.subplot.bottom']
Ny,Nx = dataFrame.shape
figWidth = (Nx*cellSizePixels/dpi)/0.8/marginWidth
figHeigh = (Ny*cellSizePixels/dpi)/0.8/marginHeight
不幸的是,matplotlib 似乎必须在绘图过程中进行一些调整,因为这不足以获得完美的正方形热图单元。因此,我选择事后调整 clustermap 创建的各个轴的大小,从热图开始,然后是树状图轴。
我认为生成的图像非常接近您想要获得的图像,但我的测试有时会显示 1-2 像素的一些错误,我将其归因于由于英寸和像素尺寸之间的所有转换而导致的舍入错误。
dataFrameA = pd.DataFrame([ [1,2],[3,4] ])
dataFrameB = pd.DataFrame( np.arange(3*6).reshape(3,-1))
def fixedWidthClusterMap(dataFrame, cellSizePixels=50):
# Calulate the figure size, this gets us close, but not quite to the right place
dpi = matplotlib.rcParams['figure.dpi']
marginWidth = matplotlib.rcParams['figure.subplot.right']-matplotlib.rcParams['figure.subplot.left']
marginHeight = matplotlib.rcParams['figure.subplot.top']-matplotlib.rcParams['figure.subplot.bottom']
Ny,Nx = dataFrame.shape
figWidth = (Nx*cellSizePixels/dpi)/0.8/marginWidth
figHeigh = (Ny*cellSizePixels/dpi)/0.8/marginHeight
# do the actual plot
grid = sns.clustermap(dataFrame, figsize=(figWidth, figHeigh))
# calculate the size of the heatmap axes
axWidth = (Nx*cellSizePixels)/(figWidth*dpi)
axHeight = (Ny*cellSizePixels)/(figHeigh*dpi)
# resize heatmap
ax_heatmap_orig_pos = grid.ax_heatmap.get_position()
grid.ax_heatmap.set_position([ax_heatmap_orig_pos.x0, ax_heatmap_orig_pos.y0,
axWidth, axHeight])
# resize dendrograms to match
ax_row_orig_pos = grid.ax_row_dendrogram.get_position()
grid.ax_row_dendrogram.set_position([ax_row_orig_pos.x0, ax_row_orig_pos.y0,
ax_row_orig_pos.width, axHeight])
ax_col_orig_pos = grid.ax_col_dendrogram.get_position()
grid.ax_col_dendrogram.set_position([ax_col_orig_pos.x0, ax_heatmap_orig_pos.y0+axHeight,
axWidth, ax_col_orig_pos.height])
return grid # return ClusterGrid object
grid = fixedWidthClusterMap(dataFrameA, cellSizePixels=75)
plt.show()
grid = fixedWidthClusterMap(dataFrameB, cellSizePixels=75)
plt.show()
关于python - Seaborn clustermap 固定单元格大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52806878/
我正在尝试可视化 CNN 文本分类模型中正在学习的过滤器。为此,我在卷积层之后立即提取了文本样本的特征图,对于大小为 3 的过滤器,我得到了一个 (filter_num)*(length_of_sen
我想将我自己的距离矩阵(行链接)传递给 seaborn clustermap。 已经有一些这样的帖子 Use Distance Matrix in scipy.cluster.hierarchy.li
seaborn clustermap似乎是一个图形级别的情节,它在内部创建自己的图形和轴。 我想将集群用作子图,以便能够在同一图形上添加额外的图(例如,热图顶部的箱线图)。 我怎样才能做到这一点? 谢
在调整 seaborn.clustermap 中的颜色条时遇到一些问题。我正在尝试: 水平调整颜色条 更改颜色条边框颜色 更改颜色条刻度长度 我检查了documentation对于 figure.co
我正在使用seaborn clustermap函数,我想制作多个图,其中单元格大小完全相同。轴标签的大小也应该相同。这意味着图形大小和纵横比需要改变,其余部分需要保持不变。 import pandas
我使用 seaborn.clustermap 生成了一个 clustermap。我想显示 row_colors 选项来突出显示一些集群,但这是我得到的结果: clustermap with missi
我正在使用seaborn clustermap函数,我想制作多个图,其中单元格大小完全相同。轴标签的大小也应该相同。这意味着图形大小和纵横比需要改变,其余部分需要保持不变。 import pandas
我使用 seaborn.clustermap 生成了一个 clustermap。我想显示 row_colors 选项来突出显示一些集群,但这是我得到的结果: clustermap with missi
我正在使用seaborn从矩阵绘制聚类图,并且我希望矩阵的值作为聚类图的注释。然而,虽然聚类图重新排列数据矩阵的行和列以形成聚类,但它不会对注释矩阵这样做。 这是我的代码: data = np.ran
我正在创建一个包含 529 个基因列表的聚类图。由于某种原因,并非数据帧索引中的所有基因都显示在聚类图中。我附上了一张显示问题的图片。任何帮助将不胜感激。 def create_heatmap(dat
我想在 seaborn 的聚类 map 图形输出方面得到一些帮助。 在我的数据中,我丢失了转换为 0 的数据。 我想为等于零的值使用白色,为其余值使用调色板。 有没有办法在cmap中标明? impor
有没有办法从a至 b在下图中用脚本?我正在使用 seaborn.clustermap()去a (即保留行的顺序。但是,列顺序仅在第二高级别发生变化)。 我想知道是否可以使用 seaborn.matri
我有一个三列的 csv 文件,我正在尝试将其转换为聚类热图。我的代码如下所示: sum_mets = pd.read_csv('sum159_localization_met_magma.csv')
我已经搜索过,但还没有发现如何向 Seaborn Clustermap 添加标题。 我努力了: plt.title('Title',loc='center') 但这将标题添加到图例,而不是主集群 ma
我正在使用 seaborn.clustermap 的层次聚类来聚类我的数据。这可以很好地在热图中很好地可视化集群。但是,现在我想提取分配给不同集群的所有行值。 这是我的数据的样子: import pa
我正在使用以下代码创建聚类图。 import numpy as np import pandas as pd import seaborn as sns all_net_names = ['earl
添加自动缩放和自动居中谷歌集群 map 的最佳方式是什么?目前中心和缩放是硬编码的,与动态生成的标记有冲突。 function initMap() { var map = new go
给出以下示例,该示例来自:https://python-graph-gallery.com/404-dendrogram-with-heat-map/ 它生成一个树状图,我假设它是基于 scipy 的
我试图将以下两个图放在同一个图形上: import seaborn as sns; sns.set(color_codes=True) import matplotlib.pyplot as plt
我使用 seaborn.clustermap 生成了一个 clustermap。我想在热图顶部绘制/绘制一条水平线,如图所示 我只是尝试将 matplotlib 用作: plt.plot([x1, x
我是一名优秀的程序员,十分优秀!