簡體   English   中英

如何注釋熱圖中的特定單元格?

[英]How to annotate specific cells in a heatmap?

我怎樣才能只注釋四個角單元格?

for N in Nvals:
    for R in Rvals:
        filename = "data"
        filename += "-N" + str(N) + "-R0" + str(R)
        filename += ".txt"

        data = []
        with open(filename) as file:
            for line in file.readlines():
                #line = line.strip('"\'`(), False True \n')
                try:
                    value = float(line)
                except ValueError:
                    pass
                else:
                    data.append(value)

        data = np.array(data)
        mean.append(np.mean(data))
               
    mean = np.array(mean).reshape(11,10)

    plt.figure(1)
    plt.figure(figsize=(3,3), dpi=175)

    res=sns.heatmap(mean,square=True,
                norm=LogNorm(0.01, 100),
            annot=True,annot_kws={'size': 4},
            xticklabels=False, yticklabels=False,
            cbar = False,
            cmap="viridis_r")
    res.invert_yaxis()

Seaborn 的heatmap允許明確給出一個二維數組作為注釋。 例如,您可以創建一個列表列表,其中包含除角落之外的所有空字符串:

from matplotlib import pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np
import seaborn as sns

mean = 100 ** np.random.rand(11, 10)
plt.figure(1, figsize=(3, 3), dpi=175)

annot_values = np.full_like(mean, np.nan)
for i, j in [(0, 0), (0, -1), (-1, 0), (-1, -1)]:
    annot_values[i, j] = mean[i, j]
m, n = mean.shape
annot_values = [[f'{mean[i, j]:.2g}' if i in (0, m - 1) and j in (0, n - 1) else ''
                 for j in range(n)]
                for i in range(m)]
ax = sns.heatmap(mean, square=True,
                 norm=LogNorm(0.01, 100),
                 annot=annot_values, annot_kws={'size': 10}, fmt="s",
                 xticklabels=False, yticklabels=False,
                 cbar=False,
                 cmap="viridis_r")
ax.invert_yaxis()
plt.tight_layout()
plt.show()

示例圖

PS:請注意,每次調用plt.figure()時都會創建一個新圖形。 因此,建議將兩個調用合二為一,防止創建空圖。

關於f'{mean[i, j]:.2g}'

  • f將字符串更改為格式化字符串
  • {}中的部分采用{value:format}{value}形式(獲取默認格式),並將替換為格式化文本。
  • 格式規范是完整的mini-language的一部分,其中.2g表示具有2有效數字的“通用”格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM