Matplotlib通过海洋图的轴在多个子图中循环 [英] Matplotlib loop through axes in a seaborn plot for multiple subplots

查看:37
本文介绍了Matplotlib通过海洋图的轴在多个子图中循环的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在海洋直方图(分布图)上创建五个子图(一个数据框的特定列中的每个类别一个).

I'd like to create five subplots (one for each category in a specific column of a dataframe) on a seaborn histogram (distplot).

我的数据集是:

prog score
cool 1.9
cool 3.7
yay  4.5
yay  2.6
neat 1.4
neat 7
neat 6
wow  4.1
wow  1.7
wow  1.4
hooray 6.6
hooray 5.6
hooray 4.9
yikes 1.2
yikes 3.9
yikes 6.9

我不希望绘制所有的'prog',只列出其中的一个:

I don't want all of the 'prog's plotted, just each in a list:

prog_list = ['cool', 'yay', 'neat', 'yikes', 'wow']

scores = df['score']
f, axes = plt.subplots(3, 2, figsize=(15, 15))
# Delete last chart since there are only 5 subplots I need
f.delaxes(ax = axes[2,1])

for i, axes in enumerate(f.axes):
scores = df.loc[(df['prog'] == prog_list[i])]['score']
    axes = sns.distplot(scores, norm_hist=True, color='b')
    sigma = round(scores.std(), 3)
    mu = round(scores.mean(), 2)
    axes.set_xlim(1,7)
    axes.set_xticks(range(2,8))
    axes.set_xlabel('Score - Mean: {} (σ {})'.format(mu, sigma))
    axes.set_ylabel('Density')

但是,当我这样做时,它只是将每个子集绘制到同一图上(这很酷,但绝对不是我想要的).

But when I do this, it just plots each subset onto the same plot (which is kind of cool, but definitely not what I want here).

推荐答案

尝试一下:

# your code use axes and redefine it after every iteration
# I think this would be better
for prog, ax in zip(prog_list, axes.flatten()[:5]):
    scores = df.loc[(df['prog'] == prog)]['score']

    # note how I put 'ax' here
    sns.distplot(scores, norm_hist=True, ax=ax, color='b')

    # change all the axes into ax
    sigma = round(scores.std(), 3)
    mu = round(scores.mean(), 2)
    ax.set_xlim(1,7)
    ax.set_xticks(range(2,8))
    ax.set_xlabel('Score - Mean: {} (σ {})'.format(mu, sigma))
    ax.set_ylabel('Density')

plt.show()

输出:

这篇关于Matplotlib通过海洋图的轴在多个子图中循环的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆