【问题标题】:Get heatmap annotation dictionary from plot从图中获取热图注释字典
【发布时间】:2019-07-29 23:47:21
【问题描述】:

我有一张热图:

fig =figsize(8,8)
ax = sbn.heatmap(good,annot=True, fmt='.2f', linewidths=.3, annot_kws={"size": 14},square=True,robust=True,cmap=sbn.light_palette((210, 90, 60), input="husl") )

seaborn 热图可以方便地设置我的注释颜色。我想访问annot_kws 字典,但我不知道该怎么做。我基本上想在不同的情节中重用seaborn 自动生成的颜色。

更清晰的例子:

test = np.array([np.array([0.77,0.21]),np.array([0.21,0.51])])
ax = sbn.heatmap(test,annot=True, fmt='.2f',  annot_kws={"size": 14},cmap=sbn.light_palette((210, 90, 60), input="husl") )

给我this plot

我可以把默认注解的颜色全部改成单一颜色

test = np.array([np.array([0.77,0.21]),np.array([0.21,0.51])])
ax = sbn.heatmap(test,annot=True, fmt='.2f',  annot_kws={"size": 14, "color":'black'},cmap=sbn.light_palette((210, 90, 60), input="husl") )

这给了我this picture

我想将信息传递给热图,也就是说让我将所有白色注释更改为黄色,但将黑色注释保留为黑色。而且我想如果我可以获得有关当前注释颜色的信息,我可以根据它是黑色还是白色和不同颜色来更新它们,但不知道如何实际获取该信息。

【问题讨论】:

    标签: python seaborn


    【解决方案1】:

    编辑:我第一次误读了您的问题。我认为这个经过编辑的答案符合您的要求。

    您可以通过subplots.get_children()访问注解(即Text对象)

    代码:

    import matplotlib.pyplot as plt
    import numpy as np
    import pandas as pd
    import seaborn as sns
    from matplotlib.text import Text
    
    # default colormap example
    df = pd.DataFrame(np.random.normal(size=(5, 5)))
    subplots = sns.heatmap(df.corr(), annot=True, annot_kws={"size": 14, "color": "black"})
    
    # the first 5 * 5 Text objects in text_objs are the matrix annotations
    # the few at the end are default annotations (title text I think) and are not
    #   formatted according to to annot_kws; ignore these
    text_objs = list(filter(lambda x: isinstance(x, Text), subplots.get_children()))
    print(len(text_objs))
    # first Text object
    print(text_objs[0].get_size())
    print(text_objs[0].get_color())
    # last Text object
    print(text_objs[-1].get_size())
    print(text_objs[-1].get_color())
    

    输出:

    28
    14.0
    'black'
    12.0
    'black' # this is a coincidence
    

    【讨论】:

    • 一旦我有了这些 text_objects,我想再次设置它们,比如用不同的颜色,但只有 obj 1 的颜色为“黑色”,其他所有的颜色都不同
    • 查看我在回答中链接的文本的文档。 get 和 set 方法成对出现。
    • 太棒了!谢谢你。我忽略了这一点。
    猜你喜欢
    • 2018-09-07
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多