Как сделать сгруппированный граф boxplot в matplotlib

У меня есть три алгоритма, A, B и C. Я запускаю их для разных наборов данных и хотел бы построить график их времени выполнения для каждого в виде сгруппированного коробочного графика в Python.

В качестве наглядного примера того, что я хочу, я нарисовал ужасный рисунок, но, надеюсь, это поможет понять смысл.

построение графика

Если мои данные в Python выглядят так:

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)

Как мне сделать мой сюжет похожим на рисунок, который я нарисовал?

1 ответ

Решение

Проще всего сделать это с независимыми участками:

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()

введите описание изображения здесь

Другие вопросы по тегам