我正在尝试使用 Seaborn 在 Python 上创建带有树状图的热图,并且我有一个大约 900 行的 csv 文件。我正在将文件作为 pandas 数据框导入并尝试绘制该文件,但大量行未在热图中表示。我做错了什么?
这是我现在拥有的代码。但热图仅代表大约 49 行。 但它没有显示我的所有数据。
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()
谢谢你。
另一种方法是在 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()
据我所知,适用于seaborn heatmaps的关键字也适用于clustermap,因为sns.clustermap传递到sns.heatmap。在这种情况下,您在示例中所需要做的就是将
yticklabels=True
设置为 sns.clustermap()
中的关键字参数。这将使所有 900 行出现。
默认设置为“自动”以避免重叠。这同样适用于 xticklabels。在此处查看更多信息:https://seaborn.pydata.org/ generated/seaborn.heatmap.html
查看链接的图像,这看起来像是图形太小/标签文本太大的简单情况。
figsize=(x,y)
可能就是您想要的。
我找不到 x 和 y 的定义,但是看看我的各种聚类图,它的大小似乎以像素/100 为单位,即你想要的大小,假设 100 dpi。有 900 个条目,假设您需要 10 像素高度才能使标签可读,则需要 900 * 10 = 9000 像素高度,即
figsize=(90,90)
(假设是方阵)。
当然需要大量缩放才能阅读任何内容(或巨大的屏幕/绘图),但您根本无法将 900 行文本放入家庭大小的图像中。