首页 > 解决方案 > 在 x 轴上添加第二个标签

问题描述

我有我想在我的条形图上看到的特定标签。为了生成绘图,我使用以下代码

import pandas as pd
import seaborn as sns

d = {'P': {0: 'BO', 1: 'BO', 2: 'BO', 3: 'BO', 4: 'BO'},
     'M': {0: 'NB', 1: 'LR', 2: 'SVM', 3: 'SGD', 4: 'RF'},
     'PP': {0: '0.72', 1: '0.71', 2: '0.85', 3: '0.54', 4: '0.75'},
     'R': {0: '0.82', 1: '0.62', 2: '0.64', 3: '0.54', 4: '0.70'},
     'F': {0: '0.71', 1: '0.52', 2: '0.76', 3: '0.73', 4: '0.65'},
     'A': {0: '0.91', 1: '0.91', 2: '0.92', 3: '0.92', 4: '0.92'},
     'D': {0: 'A', 1: 'A', 2: 'A', 3: 'B', 4: 'B'}}

df = pd.DataFrame(d)
df2 = df.melt(['P', 'M', 'D'])
df2.value = df2.value.astype(float)
g = sns.catplot(
    data=df2,
    x='M',
    y='value',
    hue='P',
    col='variable',
    col_wrap=2,
    col_order = ['PP', 'R', 'F', 'A'],
    kind='bar',
    facet_kws={'sharey': False, 'sharex': False},
    height=3,
)

问题是我想在数据集上添加 D 信息,并且不允许在该函数中使用样式。所以我想在 x-xis ('D') 上添加第二个标签,就像在这个例子中一样:How to add the second line of labels for axes。但是,当我尝试运行代码时,出现以下错误: ValueError: Could not interpret value variablefor parameter col

如果您能帮助我修复此错误并使用上面的代码类似地可视化我的数据,我将不胜感激,但在 x 轴上有第二个标签,用于通过“D”区分条形。

编辑:df2 如下所示

在此处输入图像描述

标签: pythonmatplotlibseaborn

解决方案


我在 D 列中为 x 轴刻度线添加了一个属性。我正在从子图中获取相应的刻度信息,对其进行处理和更新。即使所需的输出不同,也可以应用此方法。

g = sns.catplot(
    data=df2,
    x='M',
    y='value',
    hue='P',
    col='variable',
    col_wrap=2,
    col_order = ['PP', 'R', 'F', 'A'],
    kind='bar',
    facet_kws={'sharey': False, 'sharex': False},
    height=3,
)
d_col = df['D'][:8]
for ax in g.axes.flat:
    labels = ax.get_xticklabels()
    for i,l in enumerate(labels):
        tmp = l.get_text()
        labels[i] = tmp + '\n' + d_col[i]
        ax.set_xticklabels(labels)

在此处输入图像描述


推荐阅读