我正在像这样的两个子图中使用seaborn boxenplot / letter-value plot
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)
答案 0 :(得分:0)
所以我部分解决了这个问题。 尽管如此,这不是解决方法,而不是答案,我仍然希望有一个更好的答案。例如,允许我用破折号代替要点。
为了确定中位数,我使用以下内容:
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)