【问题标题】:Seaborn Heatmap Currency FormatSeaborn 热图货币格式
【发布时间】:2016-05-02 09:02:44
【问题描述】:

鉴于以下热图:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
%matplotlib inline
df = pd.DataFrame(
      {'A' : ['A', 'A', 'B', 'B','C', 'C', 'D', 'D'],
       'B' : ['A', 'B', 'A', 'B','A', 'B', 'A', 'B'],
       'C' : [22000, 4000, 500, 20000, 0, 3000, 90000, 1000],
       'D' : [6000, 62000, 7000, 700, 30000, 30, 1000, 1000]})

df=df.pivot('A','B','C')
fig, ax = plt.subplots(1, 1, figsize =(4,6))

sns.heatmap(df, annot=True, linewidths=0, cbar=False)
plt.show()

我希望这些值显示为以千为单位的货币,如下所示: 2.2 万美元

奖金问题:显示为千位,小数点如下:$8.9K

【问题讨论】:

  • 仅供参考:彻底回答问题非常耗时。如果您的问题已解决,请通过接受最适合您的需求的解决方案表示感谢。✔ 位于答案左上角的 ▲/▼ 箭头下方。如果出现更好的解决方案,则可以接受新的解决方案。如果您的声望超过 15,您还可以使用 ▲/▼ 箭头对答案的有用性进行投票。 如果解决方案无法回答问题,请发表评论。 What should I do when someone answers my question?。谢谢。

标签: python-3.x pandas matplotlib seaborn heatmap


【解决方案1】:

您可以对数据框中的每个元素应用字符串转换,并将其用于注释:

import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd

df = pd.DataFrame(
    {'A': ['A', 'A', 'B', 'B', 'C', 'C', 'D', 'D'],
     'B': ['A', 'B', 'A', 'B', 'A', 'B', 'A', 'B'],
     'C': [22000, 4000, 500, 20000, 0, 3000, 90000, 1000],
     'D': [6000, 62000, 7000, 700, 30000, 30, 1000, 1000]})

df = df.pivot('A', 'B', 'C')
df_formatted = df.applymap(
    lambda val: f'${val / 1000:,.0f}K' if round(val / 100) % 10 == 0 else f'${val / 1000:,.1f}K')

fig, ax = plt.subplots(figsize=(4, 6))
sns.heatmap(df, annot=df_formatted, fmt='', linewidths=0, cbar=False, ax=ax)
plt.show()

【讨论】:

    【解决方案2】:

    df["C"] = df["C"].map(lambda x: "${:,.1f}".format(x/1000.))

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      相关资源
      最近更新 更多