【问题标题】:Adding a second label on the x axis在 x 轴上添加第二个标签
【发布时间】:2021-05-05 11:52:06
【问题描述】:

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

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 translate value variable for parameter col

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

编辑:df2 如下所示

【问题讨论】:

  • 你能打印出 df2 的样子吗
  • 我添加了一张图片来展示 df2 的外观。我认为代码应该可以正常生成图中的数据集

标签: python matplotlib seaborn


【解决方案1】:

我在 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)

【讨论】:

    猜你喜欢
    • 2019-10-02
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多