[英]How to remove large whitespace from empty colorbar/cbar in seaborn's clustermap?
加載包、顯示版本和獲取數據以實現可重復性:
import seaborn as sns; print("Seaborn:", sns.__version__)
import matplotlib as mpl; import matplotlib.pyplot as plt; print("Matplotlib:", mpl.__version__)
import pandas as pd; print("Pandas:", pd.__version__)
# Seaborn: 0.11.0
# Matplotlib: 3.3.1
# Pandas: 1.0.5
df = pd.read_csv("https://pastebin.com/raw/w53mAAXN", sep="\t", index_col=0)
vmax = df.abs().values.ravel().max()
figsize = (40,13)
使用cbar=False
嘗試clustermap
在cbar=False
留下一個巨大的空白和一個空的ax
對象:
with plt.style.context("seaborn-white"):
# _, ax_null = plt.subplots(figsize=(0.1,0.1))
g = sns.clustermap(df,
cbar=False,
# cbar_ax=None,
dendrogram_ratio=0.382,
method="ward",
row_cluster=False,
metric="euclidean",
mask=df == 0,
figsize=figsize,
cmap=plt.cm.seismic,
edgecolor="white",
linewidth=1,
xticklabels=True,
vmax=vmax,
vmin=-vmax,
)
g.ax_heatmap.set_facecolor("gray")
嘗試clustermap
具有非常小的自定義cax
。 當cbar_ax=None
時會發生同樣的事情:
with plt.style.context("seaborn-white"):
_, ax_null = plt.subplots(figsize=(0.1,0.1))
g = sns.clustermap(df,
# cbar=False,
cbar_ax=ax_null,
dendrogram_ratio=0.382,
method="ward",
row_cluster=False,
metric="euclidean",
mask=df == 0,
figsize=figsize,
cmap=plt.cm.seismic,
edgecolor="white",
linewidth=1,
xticklabels=True,
vmax=vmax,
vmin=-vmax,
)
g.ax_heatmap.set_facecolor("gray")
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-86-f7a221f170c3> in <module>
12 with plt.style.context("seaborn-white"):
13 _, ax_null = plt.subplots(figsize=(0.1,0.1))
---> 14 g = sns.clustermap(df,
15 # cbar=False,
16 cbar_ax=ax_null,
~/anaconda3/envs/soothsayer5_env/lib/python3.8/site-packages/seaborn/_decorators.py in inner_f(*args, **kwargs)
44 )
45 kwargs.update({k: arg for k, arg in zip(sig.parameters, args)})
---> 46 return f(**kwargs)
47 return inner_f
48
~/anaconda3/envs/soothsayer5_env/lib/python3.8/site-packages/seaborn/matrix.py in clustermap(data, pivot_kws, method, metric, z_score, standard_scale, figsize, cbar_kws, row_cluster, col_cluster, row_linkage, col_linkage, row_colors, col_colors, mask, dendrogram_ratio, colors_ratio, cbar_pos, tree_kws, **kwargs)
1400 colors_ratio=colors_ratio, cbar_pos=cbar_pos)
1401
-> 1402 return plotter.plot(metric=metric, method=method,
1403 colorbar_kws=cbar_kws,
1404 row_cluster=row_cluster, col_cluster=col_cluster,
~/anaconda3/envs/soothsayer5_env/lib/python3.8/site-packages/seaborn/matrix.py in plot(self, metric, method, colorbar_kws, row_cluster, col_cluster, row_linkage, col_linkage, tree_kws, **kws)
1231
1232 self.plot_colors(xind, yind, **kws)
-> 1233 self.plot_matrix(colorbar_kws, xind, yind, **kws)
1234 return self
1235
~/anaconda3/envs/soothsayer5_env/lib/python3.8/site-packages/seaborn/matrix.py in plot_matrix(self, colorbar_kws, xind, yind, **kws)
1182 # Setting ax_cbar=None in clustermap call implies no colorbar
1183 kws.setdefault("cbar", self.ax_cbar is not None)
-> 1184 heatmap(self.data2d, ax=self.ax_heatmap, cbar_ax=self.ax_cbar,
1185 cbar_kws=colorbar_kws, mask=self.mask,
1186 xticklabels=xtl, yticklabels=ytl, annot=annot, **kws)
TypeError: heatmap() got multiple values for keyword argument 'cbar_ax'
禁用g.cax.set_visible(False)
時產生大量空白:
with plt.style.context("seaborn-white"):
# _, ax_null = plt.subplots(figsize=(0.1,0.1))
g = sns.clustermap(df,
# cbar=False,
# cbar_ax=None,
dendrogram_ratio=0.382,
method="ward",
row_cluster=False,
metric="euclidean",
mask=df == 0,
figsize=figsize,
cmap=plt.cm.seismic,
edgecolor="white",
linewidth=1,
xticklabels=True,
vmax=vmax,
vmin=-vmax,
)
g.ax_heatmap.set_facecolor("gray")
g.cax.set_visible(False)
您設置的一些比率(通過 figsize 和 dendrogram_ratio)會影響盒子的大小。 我暫時將它們排除在外,但如果您想根據自己的喜好優化這些比率,您將獲得所需的顏色條大小。 我還添加了tight_layout
這也有幫助。
df = pd.read_csv("https://pastebin.com/raw/w53mAAXN", sep="\t", index_col=0)
vmax = df.abs().values.ravel().max()
# figsize = (40, 13)
with plt.style.context("seaborn-white"):
# _, ax_null = plt.subplots(figsize=(0.1,0.1))
# cbar_ax = plt.gcf().add_axes([.91, .3, .03, .4])
g = sns.clustermap(df,
cbar=True,
# cbar_kws = dict(use_gridspec=False,location="top"),
# dendrogram_ratio=0.382,
method="ward",
row_cluster=False,
metric="euclidean",
mask=df == 0,
# figsize=figsize,
cmap=plt.cm.seismic,
edgecolor="white",
linewidth=1,
xticklabels=True,
vmax=vmax,
vmin=-vmax,
)
plt.setp(g.ax_heatmap.get_xticklabels(), rotation=90)
plt.subplots_adjust(bottom=0.5)
g.ax_heatmap.set_facecolor("gray")
plt.tight_layout()
plt.show()
刪除樹狀圖軸:
with plt.style.context("seaborn-white"):
# _, ax_null = plt.subplots(figsize=(0.1,0.1))
g = sns.clustermap(df,
# cbar=False,
# cbar_ax=None,
dendrogram_ratio=(0,0.382), # This line
method="ward",
row_cluster=False,
metric="euclidean",
mask=df == 0,
figsize=figsize,
cmap=plt.cm.seismic,
edgecolor="white",
linewidth=1,
xticklabels=True,
vmax=vmax,
vmin=-vmax,
)
g.ax_heatmap.set_facecolor("gray")
g.cax.set_visible(False)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.