python - 在 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 variable
for parameter col
。
如果您能帮助我修复此错误并使用上面的代码类似地可视化我的数据,我将不胜感激,但在 x 轴上有第二个标签,用于通过“D”区分条形。
编辑:df2 如下所示
解决方案
我在 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)
推荐阅读
- tensorflow - 使用 ADAM 优化器时真的有必要调整/优化学习率吗?
- c# - MessageAppService 类不能有多个基类“Hub”和“AsyncCrudAppService”
- matlab - 出现错误时立即添加调试点 MATLAB
- python - 在某个选项之后终止选项列表
- javascript - 如何自定义 Yandex 地图 api 控件?
- docker-machine - docker-machine 时间比我的 macbook 提前 4 小时:容器 - UTC,macbook - EDT
- rest - 当 SOAP 和 RESTful 战争都捆绑在单个 EAR 中并部署在 WebSphere 中时,WebServiceContext 为空
- c++ - 我可以设置工具提示出现在 QGraphicsItem 上的时间吗?
- java - 使用 python 解密 java (DESede/ECB/PKCS5Padding) 密码
- python - python cli - 通过浏览器验证 github 用户