1 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
您可以循環(huán)瀏覽標(biāo)簽并將它們放置在平均值處。小 y 刻度線可以用作分隔符。
以下代碼假設(shè)第一列具有集群標(biāo)簽(并且不會(huì)用于熱圖本身)。
import pandas as pd
import seaborn as sns
from io import StringIO
import matplotlib.pyplot as plt
from matplotlib.ticker import FixedLocator
data_str = ''' cluster "Location 1" "Location 2" "Location 3"
"cluster 1" 0.3 0.5 0.7
"cluster 1" 1.2 3.1 1.2
"cluster 1" 0.8 0.1 1.3
"cluster 2" 0.2 0.3 1.0
"cluster 2" 3.1 2.1 5
"cluster 3" 0.9 0.7 0.2'''
df = pd.read_csv(StringIO(data_str), delim_whitespace=True)
ax = sns.heatmap(df[df.columns[1:]], cmap='rocket_r', annot=True)
ax.xaxis.tick_top()
ticks = []
labels = []
prev_label = None
for i, label in enumerate(df['cluster']):
if label != prev_label:
ticks.append(i)
labels.append(label)
prev_label = label
ticks.append(i + 1)
ax.yaxis.set_minor_locator(FixedLocator(ticks))
ax.yaxis.set_major_locator(FixedLocator([(t0 + t1) / 2 for t0, t1 in zip(ticks[:-1], ticks[1:])]))
ax.set_yticklabels(labels, rotation=0)
ax.tick_params(axis='both', which='major', length=0)
ax.tick_params(axis='y', which='minor', length=60)
plt.tight_layout()
plt.show()
添加回答
舉報(bào)