如何格式化热图注释浮动以仅显示小数部分

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

我有浮点数,我只对它们的小数位感兴趣,因为整数部分并不重要(并且在我的问题中总是相同的)。

我必须使用字符串格式,因为数字将显示在seaborn 图中。 我在用着

'0.2f'
仅显示两位小数,但我不知道如何删除整数部分。

示例:

我想展示

.25
而不是
0.25

详情:

实施必须能够格式化

seaborn.heatmap
中的值:

sns.heatmap(table, annot = True, fmt = '.2f') 

但我只想显示如上所述的小数。

python python-3.x matplotlib seaborn string-formatting
4个回答
0
投票
  • 根据 为什么 f 字符串格式化不适用于 Pandas DataFrames?,f 字符串可以在列表理解中与
    .apply
    一起使用,以格式化数据框中的所有列,然后什么时候可以传递给
    annot=
    ,与
    fmt=''
    • 每个值均使用
      f'{v:.2f}'[-3:]
      进行格式化,其中
      .2f
      四舍五入到小数点后两位,而
      [-3:]
      则对最后三个字符进行切片(例如
      .xx
      )。
import seaborn as sns

# sample data
glue = sns.load_dataset('glue').pivot(index='Model', columns='Task', values='Score')

# create a new f-string formatted dataframe
annot = glue.apply(lambda col: [f'{v:.2f}'[-3:] for v in col], axis=0)

# plot with annotations
ax = sns.heatmap(data=glue, fmt='', annot=annot)

glue

Task         CoLA  MNLI  MRPC  QNLI   QQP   RTE  SST-2  STS-B
Model                                                        
BERT         60.5  86.7  89.3  92.7  72.1  70.1   94.9   87.6
BiLSTM       11.6  65.6  81.8  74.6  62.5  57.4   82.8   70.3
BiLSTM+Attn  18.6  67.6  83.9  74.3  60.1  58.4   83.0   72.8
BiLSTM+CoVe  18.5  65.4  78.7  70.8  60.6  52.7   81.9   64.4
BiLSTM+ELMo  32.1  67.2  84.7  75.5  61.1  57.4   89.3   70.3
ERNIE        75.5  92.3  93.9  97.3  75.2  92.6   97.8   93.0
RoBERTa      67.8  90.8  92.3  95.4  74.3  88.2   96.7   92.2
T5           71.6  92.2  92.8  96.9  75.1  92.8   97.5   93.1

annot

Task        CoLA MNLI MRPC QNLI  QQP  RTE SST-2 STS-B
Model                                                
BERT         .50  .70  .30  .70  .10  .10   .90   .60
BiLSTM       .60  .60  .80  .60  .50  .40   .80   .30
BiLSTM+Attn  .60  .60  .90  .30  .10  .40   .00   .80
BiLSTM+CoVe  .50  .40  .70  .80  .60  .70   .90   .40
BiLSTM+ELMo  .10  .20  .70  .50  .10  .40   .30   .30
ERNIE        .50  .30  .90  .30  .20  .60   .80   .00
RoBERTa      .80  .80  .30  .40  .30  .20   .70   .20
T5           .60  .20  .80  .90  .10  .80   .50   .10

-1
投票

您可以尝试

nb -= int(nb)
decimalPart = nb - int(nb)
使数字仅保留小数部分。


-1
投票

以下代码从给定的浮点数中提取 2 位小数。

float_number = 28.31
formatted_number = "{:.2f}".format(float_number).split('.')[1]

您可以将上述内容传递给格式化程序,如下所示,并根据您的要求完成绘图。


-1
投票

乘以 100,然后打印结果,“手动”添加小数点...这假设你的数字都小于 1。

>>> num = 0.675
>>> print(f".{100*num:.0f}")
.68
© www.soinside.com 2019 - 2024. All rights reserved.