python - 如何使用子图编辑中线并为 seaborn.boxenplot() 添加平均值?
问题描述
我在这样的两个子图中使用seaborn boxenplot / letter-value 图
data = np.random.randn(100, 5)
fig, ax = plt.subplots(figsize=(12,8), ncols=1, nrows=2,
gridspec_kw={'height_ratios':[len(mat_cat), 1]})
sns.set_style('whitegrid')
sns.boxenplot(data=data[:][:4], ax=ax[0], orient='h')
sns.boxenplot(data=data[:][5], ax=ax[1], orient='h')
ax[0].set_xlim(-3, 3)
ax[1].set_xlim(-2, 2)
现在我想编辑中间破折号的外观(例如红线而不是黑色),并在图中添加平均值(例如蓝色虚线)。
但是我不知道该怎么做。例如,当我做类似ax[0].plot()
的事情时,盒子会被绘制在彼此的顶部。有任何想法吗?
更新
我想出了如何编辑现有的中位数。如果我添加以下代码,上部子图的中间虚线将变为虚线、红色和 20% 透明。
for l in ax[0].lines:
l.set_linestyle('--')
l.set_color('r')
l.set_alpha(0.8)
解决方案
所以我部分解决了这个问题。尽管如此,这与其说是答案,不如说是一种解决方法,我仍然希望有一个更好的解决方法。例如,这允许我使用破折号而不是点来表示方法。
为了固定中位数,我使用以下内容:
for l in ax[0].lines:
l.set_linestyle('--')
l.set_color('r')
l.set_alpha(0.8)
为了添加手段,我(ab-)sns.swarmplot()
与ax
关键字一起使用:
sns.swarmplot(x=[m.mean() for m in data[:][:4]], y=np.arange(len(data[:][:4])),
color='0.3', edgecolor='0.3', linewidth=3,
ax=ax[0], orient='h')
所以总代码如下所示:
data = np.random.randn(100, 5)
fig, ax = plt.subplots(figsize=(12,8), ncols=1, nrows=2,
gridspec_kw={'height_ratios':[len(mat_cat), 1]})
sns.set_style('whitegrid')
sns.boxenplot(data=data[:][:4], ax=ax[0],
orient='h')
sns.swarmplot(x=[m.mean() for m in data[:][:4]], y=np.arange(len(data[:][:4])), color='0.3', edgecolor='0.3', linewidth=3,
ax=ax[0], orient='h')
for l in ax[0].lines:
l.set_linestyle('--')
l.set_color('r')
l.set_alpha(0.8)
sns.boxenplot(data=data[:][5], ax=ax[1], orient='h')
for l in ax[1].lines:
l.set_linestyle('--')
l.set_color('r')
l.set_alpha(0.8)
sns.swarmplot(x=data[:][5].mean(), y=np.arange(1),
color='0.3', edgecolor='0.3', linewidth=3,
ax=ax[1], orient='h')
ax[0].set_xlim(-3, 3)
ax[1].set_xlim(-2, 2)
推荐阅读
- ios - React-Native 闪屏假
- html - 如何在 VS-Code IntelliSense 中查找和禁用提供相同补全的扩展?
- sql-server - 具有特定值的行的总和 T-SQL
- javascript - 反转js对象中的键值
- google-sheets - Google 表格仅显示带有文本的单元格
- python - 从pygame中的显示获取图像数组
- karate - 如何在 VSCode 上运行自定义空手道项目
- javascript - 用于合并多个 TypeScript 枚举的通用函数
- vba - 如何在 VBA Word 中制作常规表格
- python - 通过调用计算填充数据框中的新列