2013-12-04 2 views
5

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

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

boxplot graph drawing

Если мои данные в питона выглядит следующим образом:

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

Если вы используете регулярно присущи рефлективный, вербальный, посмотрите на https://github.com/matplotlib/matplotlib/pull/2643, который добавляет более гибкий интерфейс. – tacaswell

+0

Возможный дубликат [matplotlib: Group boxplots] (http://stackoverflow.com/questions/16592222/matplotlib-group-boxplots) – bluenote10

ответ

10

Это проще всего сделать это с помощью независимых сюжетных:

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

enter image description here

+0

отлично, что я хотел! Благодарю. всегда удивлял, насколько универсален matplotlib в python. – lollercoaster

+1

@lollercoaster - счастлив помочь! Ваши данные эскиза и примера сделали ваш вопрос очень ясным и легким для ответа, что бы это ни стоило. Отличный вопрос! –

+0

@JoeKington Как вы избавились от 'yticklabels' на участках 2 и 3? Они появляются на всех трех графиках для меня, и если я удалю их из одного, они исчезнут из всех трех, потому что «yaxis» является общим. – Deditos

Смежные вопросы