如何在水平Seaborn条形图上注释文本?

回声缓存

我有一个问题,就是我想对单杠进行注释时,会出现一些错误消息:

posx和posy应该是有限值

比我调查代码更令人惊讶的是,我得到了一些仅在使用hue参数时才出现的nan值

码:

ax = sns.barplot(x="Points", y="Characters", hue="Average Speeds", data=albion_dataset, palette="Set1", dodge=False)
for p in ax.patches:
    width = p.get_width()
    print(width)

输出:


2.57562




1.526325

...

但是,当我删除该hue选项时,就没有nan了,注释也可以完美地工作了。数据框本身没有nan值。如何解决此问题,以便可以使用色相功能。dtypefloats用于x和hue以及objecty。

更新:找到了一种注释条的方法,但是现在最后一个条没有注释文本。

i = 0
for p in ax.patches:
    ax.annotate("%.4f" % albion_dataset["Average Speeds"][i], (p.get_x() + p.get_width(), p.get_y() + 1.2),
            xytext=(5, 10), textcoords='offset points')
    print(i)
    i += 1

此外,由于上述代码未考虑色相值的顺序,因此如何将色相图例中的文本添加到条形图。因此,我在条上得到了错误的值。

朝日朝日

一种选择是依靠补丁本身的宽度,而不是尝试将条形与数据框匹配:

tips = sns.load_dataset("tips")
tips.loc[(tips.day=="Thur")&(tips.sex=='Female')] = np.nan
tips.loc[(tips.day=="Sat")&(tips.sex=='Male')] = np.nan
ax = sns.barplot(y="day", x="total_bill", hue="sex", data=tips, ci=None)

for p in ax.patches:
    ax.annotate("%.4f" % p.get_width(), xy=(p.get_width(), p.get_y()+p.get_height()/2),
            xytext=(5, 0), textcoords='offset points', ha="left", va="center")

在此处输入图片说明

如果您需要知道的值hue(或访问与每个条形对应的子数据框),那么我建议您显式传递anorder=hue_order=参数,以便知道条形绘制的顺序。

import itertools
tips = sns.load_dataset("tips")
tips.loc[(tips.day=="Thur")&(tips.sex=='Female')] = np.nan
tips.loc[(tips.day=="Sat")&(tips.sex=='Male')] = np.nan

group_col = 'day'
hue_col = 'sex'
order=['Sat','Sun','Thur','Fri']
hue_order = ['Female','Male']

ax = sns.barplot(y=group_col, x="total_bill", hue=hue_col, order=order, hue_order=hue_order, data=tips, ci=None)

for p,(cur_hue, cur_y) in zip(ax.patches,itertools.product(hue_order,order)):
    temp_df = tips.loc[(tips[group_col]==cur_y)&(tips[hue_col]==cur_hue)]
    # temp_df is the sub-dataframe that corresponds to the current bar `p`. It can contain 0 or more rows
    pos = p.get_width() if p.get_width()>0 else 0
    ax.annotate(cur_hue, xy=(pos, p.get_y()+p.get_height()/2),
                xytext=(5, 0), textcoords='offset points', ha="left", va="center")

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在seaborn python的分组条形图中注释文本

如何在条形图上的条形上方写文本(Python)?

如何在seaborn条形图上添加点?

如何在Seaborn facetgrid条形图上添加图例

对齐水平条形图上的文本

在水平条形图上的条形后面添加文本

如何水平居中条形图注释

在Pandas上用值注释条形图(在Seaborn因子图条形图上)

如何在条形图上正确放置条形图

在水平条形图上旋转 x 轴文本

如何在条形图上添加图例?

如何在条形图上堆叠图标?

如何在Matplotlib中的堆栈百分比条形图上添加注释?

如何创建水平堆叠的条形图,在条形图上本身以及条形图上的标签?

如何在水平条形图matplotlib的条形内写入文本?

Seaborn 水平条形图

如何使用 Seaborn 在 Matplotlib 条形图上配置标题

如何使用seaborn和twinx在条形图上绘制线图

如何在ggplot2中的群集条形图上对齐文本?

想要在Google图表(可视化)的条形图中的注释文本上添加顶部填充

熊猫条形图,如何注释分组的水平条形图

如何在水平堆叠条形图中显示条形值

密谋:如何对条形图上显示的“文本”值求和?

Seaborn Catplot在条形图上设置值

条形图上的seaborn不明线

如何在堆叠的条形图中的两个水平条之间插入文本

R Plotly:如何在水平反转的条形图中更改刻度文本的位置?

如何在D3中的水平条形图上的X轴上添加一条线

如何在分组条形图上制作水平线,同时显示与每个组和图例对应的平均值?