如何在matplotlib中制作分组箱线图 [英] how to make a grouped boxplot graph in matplotlib

查看:130
本文介绍了如何在matplotlib中制作分组箱线图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有A,B和C这三种算法.我已在不同的数据集上运行它们,并希望将它们的运行时绘制为Python中的分组箱线图.

I have three algorithms, A, B, and C. I've run them on different datasets and would like to graph their runtimes on each as a grouped boxplot in Python.

作为我想要的视觉示例,我画了一幅糟糕的图画,但希望它能说明问题.

As a visual example of what I want, I made a terrible drawing, but hopefully it gets the point across.

如果我在python中的数据如下所示:

If my data in python looks like this:

import numpy as np
import random

data = {}
data['dataset1'] = {}
data['dataset2'] = {}
data['dataset3'] = {}

n = 5
for k,v in data.iteritems():
    upper = random.randint(0, 1000)
    v['A'] = np.random.uniform(0, upper, size=n)
    v['B'] = np.random.uniform(0, upper, size=n)
    v['C'] = np.random.uniform(0, upper, size=n)

如何使我的情节看起来像我绘制的图片?

How can I make my plot look like the picture I drew?

推荐答案

使用独立的子图最容易做到这一点:

It's easiest to do this with independent subplots:

import matplotlib.pyplot as plt
import numpy as np
import random

data = {}
data['dataset1'] = {}
data['dataset2'] = {}
data['dataset3'] = {}

n = 500
for k,v in data.iteritems():
    upper = random.randint(0, 1000)
    v['A'] = np.random.uniform(0, upper, size=n)
    v['B'] = np.random.uniform(0, upper, size=n)
    v['C'] = np.random.uniform(0, upper, size=n)

fig, axes = plt.subplots(ncols=3, sharey=True)
fig.subplots_adjust(wspace=0)

for ax, name in zip(axes, ['dataset1', 'dataset2', 'dataset3']):
    ax.boxplot([data[name][item] for item in ['A', 'B', 'C']])
    ax.set(xticklabels=['A', 'B', 'C'], xlabel=name)
    ax.margins(0.05) # Optional

plt.show()

这篇关于如何在matplotlib中制作分组箱线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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