matplotlib - 如何将中位数、四分位数信息与箱线图对齐
问题描述
我正在创建一个箱线图并想要中位数和分位数的标签。我还指定了我希望绘图显示的顺序。该图按特定顺序显示,但中位数和分位数信息不显示。
我已在其他箱形图上成功使用此代码,使用不同的列名,但它不适用于这些特定的列
a4_dims = (11.7, 8.27)
fig, ax = plt.subplots(figsize=a4_dims)
sns.boxplot(x='2017Seg', y='AbsYr1Dif', data=yr1, width=.7, showfliers=False,
order=["<10","10-19","20-49","50-99","100-249","250+"])
medians = yr1.groupby(['2017Seg'])['AbsYr1Dif'].median().values
median_labels = [str(np.round(s, 2)) for s in medians]
pos = range(len(medians))
for tick,label in zip(pos,ax.get_xticklabels()):
ax.text(pos[tick], medians[tick] + 0.02, median_labels[tick],
horizontalalignment='center', size='small', color='w', weight='semibold')
upperquart = yr1.groupby(['2017Seg'])['AbsYr1Dif'].quantile(.75).values
upperquart_labels = [str(np.round(s, 2)) for s in upperquart]
pos = range(len(upperquart))
for tick,label in zip(pos,ax.get_xticklabels()):
ax.text(pos[tick], upperquart[tick] + 0.02, upperquart_labels[tick],
horizontalalignment='left', size='small', color='b', weight='semibold')
lowerquart = yr1.groupby(['2017Seg'])['AbsYr1Dif'].quantile(.25).values
lowerquart_labels = [str(np.round(s, 2)) for s in lowerquart]
pos = range(len(lowerquart))
for tick,label in zip(pos,ax.get_xticklabels()):
ax.text(pos[tick], lowerquart[tick] - 0.05, lowerquart_labels[tick],
horizontalalignment='right', size='small', color='b', weight='semibold')
无法使用截图工具。
中位数和分位数信息出现的顺序是在箱线图定义上使用 sort 之前的自然排序顺序
不工作的数据样本:
有效的数据样本:
箱线图不起作用 - 中位数/分位数乱序
解决方案
推荐阅读
- generics - 在 Haxe 中,您可以在接口中使用泛型类型来约束类型参数吗?
- machine-learning - 梯度下降与最优方程不匹配
- oracle - 当我尝试在 Oracle 数据库中插入查询时出现错误?
- python - 在二维笛卡尔平面系统中,使用 python 计算数据帧的各个点之间的距离
- css - 如何在引导网格上获得 5 个相同大小的列?
- list - Haskell中的Caesar Shift函数?
- php - 在 Laravel 7 中构建表单
- node.js - 注册验证 - db.query 中的 if 语句不起作用
- excel - 为什么我的 VBA 代码给我一个“变量未定义”错误?
- php - 使用 POST 参数和递归函数的动态 PHP 网站