使用 Seaborn 在 Python 中进行集群映射

问题描述 投票:0回答:3

我正在尝试使用 Seaborn 在 Python 上创建带有树状图的热图,并且我有一个大约 900 行的 csv 文件。我正在将文件作为 pandas 数据框导入并尝试绘制该文件,但大量行未在热图中表示。我做错了什么?

这是我现在拥有的代码。但热图仅代表大约 49 行。 Here is an image of the clustermap I've obtained但它没有显示我的所有数据。

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

# Data set
df = pd.read_csv('diff_exp_gene.csv', index_col = 0)

# Default plot
sns.clustermap(df, cmap = 'RdBu', row_cluster=True, col_cluster=True)
plt.show()

谢谢你。

python python-3.x heatmap seaborn
3个回答
0
投票

另一种方法是在 matpltlib 中使用 imshow。我不太确定你的问题是什么,但我演示了一种从 csv 文件在平面上绘制点的方法

import numpy as np
import matplotlib.pyplot as plt
import csv

infile = open('diff_exp_gene.csv')
df = csv.DictReader(in_file)
temp = np.zeros((128,128), dtype = int)
for row in data:
    if row['TYPE'] == types:
       temp[int(row['Y'])][int(row['X'])] = temp[int(row['Y'])][int(row['X'])] + 1
plt.imshow(temp, cmap = 'hot', origin = 'lower')
plt.show()

0
投票

据我所知,适用于seaborn heatmaps的关键字也适用于clustermap,因为sns.clustermap传递到sns.heatmap。在这种情况下,您在示例中所需要做的就是将

yticklabels=True
设置为
sns.clustermap()
中的关键字参数。这将使所有 900 行出现。

默认设置为“自动”以避免重叠。这同样适用于 xticklabels。在此处查看更多信息:https://seaborn.pydata.org/ generated/seaborn.heatmap.html


0
投票

查看链接的图像,这看起来像是图形太小/标签文本太大的简单情况。

figsize=(x,y)
可能就是您想要的。

我找不到 x 和 y 的定义,但是看看我的各种聚类图,它的大小似乎以像素/100 为单位,即你想要的大小,假设 100 dpi。有 900 个条目,假设您需要 10 像素高度才能使标签可读,则需要 900 * 10 = 9000 像素高度,即

figsize=(90,90)
(假设是方阵)。

当然需要大量缩放才能阅读任何内容(或巨大的屏幕/绘图),但您根本无法将 900 行文本放入家庭大小的图像中。

© www.soinside.com 2019 - 2024. All rights reserved.