【问题标题】:How to apply text/color formatting to multi index Python Chart?如何将文本/颜色格式应用于多索引 Python 图表?
【发布时间】:2020-11-20 16:01:50
【问题描述】:

我正在尝试创建一个带有简单是/否指示的图表(在本例中,使用 seaborn 的热图),但具有多个索引——我通过调用 MultiIndex.from_arrays 方法建立的层次结构。下面列出的代码从下面链接中列出的示例数据中提取,生成此热图:CurrentGraph

什么是最简单的方法 1) 删除最外层的索引标签 ("Type of Category....", "None-None") 2) 更改下一个内部索引标签的显示选项和/或颜色格式? (A类、B类、Loc1、Loc2、Loc3)

目前,它们的显示方式不是很容易看;我想这样做,因此该层中的每个标签的文本只显示一次,并且沿着 MultiIndex.from_arrays 方法中匹配的行/列居中,而不是拼接到每个条目的开头。如果可能的话,我还想在每个“部分”(A 类、B 类、Loc1、Loc2、Loc3)下面放置不同的背景颜色,以便它们在图表上看起来更明显。

有没有一种简单的方法可以使用热图/Seaborn 进行这种编辑,或者这是我必须从头开始制作的东西?对此的任何帮助表示赞赏,因为我对此仍然很陌生。

http://www.filedropper.com/heatmapdata

编辑:在代码之前添加示例数据作为下面的文本

Type of Category  Variables  Division 01  Division 02  Division 03  Division 04  Division 05  Division 06  Division 07 \\
Category A        V1         0            1            1            0            0            0            1           \\
Category A        V2         1            1            1            0            0            0            1           \\
Category A        V3         1            1            1            0            0            1            1           \\
Category A        V4         0            0            1            1            1            1            0           \\
Category A        V5         0            1            1            1            0            0            0           \\
Category A        V6         1            1            1            1            0            0            1           \\
Category B        V7         1            0            0            1            0            0            1          



import seaborn as sns; sns.set()
import pandas as pd
import matplotlib.pyplot as plt

metrics = pd.read_excel(r'EnterYourFileLocationHere\Heatmap data.xlsx',   sheet_name='Example_Data')
metrics.set_index([metrics.columns[0], metrics.columns[1]], inplace=True)
metrics.columns = pd.MultiIndex.from_arrays([['Loc1', 'Loc1', 'Loc1', 'Loc2',
                                          'Loc2', 'Loc3', 'Loc3'], 
                                         ['Division 01', 'Division 02', 
                                          'Division 03', 'Division 04',
                                          'Divsion 05', 'Division06',
                                          'Division07']])
graph = sns.heatmap(metrics, annot=True, fmt = "d", linewidth=0.5, cmap="Blues", cbar=False)

【问题讨论】:

标签: python pandas matplotlib seaborn


【解决方案1】:

我找不到装饰标签背景的示例,因此我尝试在注释中显示类别名称作为可视化示例。

import seaborn as sns
sns.set()
import pandas as pd
import matplotlib.pyplot as plt

# metrics = pd.read_excel(r'EnterYourFileLocationHere\Heatmap data.xlsx',   sheet_name='Example_Data')
metrics.set_index([metrics.columns[0], metrics.columns[1]], inplace=True)
metrics.columns = pd.MultiIndex.from_arrays([['Loc1', 'Loc1', 'Loc1', 'Loc2',
                                          'Loc2', 'Loc3', 'Loc3'], 
                                         ['Division 01', 'Division 02', 
                                          'Division 03', 'Division 04',
                                          'Divsion 05', 'Division06',
                                          'Division07']])
graph = sns.heatmap(metrics, annot=False, fmt = "d", linewidth=0.5, cmap="Blues", cbar=False)

for y in range(metrics.shape[1]):
    for x in range(metrics.shape[0]):
        if metrics.iloc[x,y] == 1:
            graph.annotate(metrics.columns[y][0]+'\n '+metrics.columns[y][1][-2:], xy = (y+0.25, x+0.75), size=12, color="#ffd700")

【讨论】:

    猜你喜欢
    • 2015-06-06
    • 2018-08-23
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多