【问题标题】:Simplest way to heatmap selected columns in python?在python中热图选定列的最简单方法?
【发布时间】:2021-01-16 14:18:38
【问题描述】:
df = pd.DataFrame({"name": ['a','b','c','d','e'],
              "year": ['2012','2013','2010','2008','2011'],
              "value": ['10','22','7','8','32']})

将热图仅应用于值列的简单方法是什么?我想避免年份被热图。

df2 = pd.DataFrame({"name": ['a','b','c','d','e'],
                  "year": ['2012','2013','2010','2008','2011'],
                  "value": ['254','220','275','283','323'],
                    "age": ['42','32','27','28','32']})

同样的问题,但分别针对价值和年龄 - 即我希望每列单独进行热图并缩放到该列(因此年龄不会显示为一个极端并重视另一个极端)。

我有很多复杂的 sn-ps 代码来实现这一点,但通常我只是将粘贴复制到 excel 中,因为它更快......有没有快速干净的方法来实现这个在 python 中的基本选择性热图?

谢谢!

【问题讨论】:

    标签: python pandas seaborn heatmap


    【解决方案1】:

    如果您在笔记本或可以呈现 HTML 的地方工作,则可以使用数据框的 style 访问器和 background_gradient。 Seaborn 使得为此目的生成颜色图变得非常容易。

    您可以使用subset 参数指定要应用颜色图的列。

    import pandas as pd
    import seaborn as sns
    
    df2 = pd.DataFrame({"name": ['a','b','c','d','e'],
                      "year": ['2012','2013','2010','2008','2011'],
                      "value": ['254','220','275','283','323'],
                        "age": ['42','32','27','28','32']})
    
    df2["value"] = pd.to_numeric(df2["value"])
    df2["age"] = pd.to_numeric(df2["age"])
    
    cm = sns.light_palette("green", as_cmap=True)
    df2.style.background_gradient(cmap=cm, subset=["value", "age"])
    

    如果您想要不同的颜色或为列指定单独的vmin/vmax,您只需多次调用background_gradient

    green_cm = sns.light_palette("green", as_cmap=True)
    blue_cm = sns.light_palette("blue", as_cmap=True)
    
    (df2.style
     .background_gradient(cmap=blue_cm, subset="value", vmin=200, vmax=400)
     .background_gradient(cmap=green_cm, subset="age", vmin=0, vmax=50))
    

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      相关资源
      最近更新 更多