2014-01-13 2 views
3

Я хочу создать ящик данных, собранный с четырех разных сайтов за последние двадцать лет (т. Е. На каждом сайте будет 20y данных). На рисунке будет отображаться 80 ящиков. Чтобы сделать фигуру разборчивой, я хочу, чтобы каждое смещение ящика и разные поля для каждого сайта. Это даст повторную серию ящиков (например, ящики для сайтов1, site2, site3, site3, site1, site2, site3, ...). Создание boxplot не проблема; смещение ящиков, похоже, является проблемой. напримерPandas boxplot x-axis setting

import numpy as np 
import pandas as pd 
from pylab import * 

first = pd.DataFrame(np.random.rand(10,5),columns=np.arange(0,5)) 
second = pd.DataFrame(np.random.rand(10,5),columns=np.arange(5,10)) 

fig = figure(figsize=(9,6.5)) 
ax = fig.add_subplot(111) 

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45) 
setp(box1['caps'],color='r',linewidth=2) 
setp(box1['boxes'],color='r',linewidth=2) 
setp(box1['medians'],color='r',linewidth=2) 
setp(box1['whiskers'],color='r',linewidth=2,linestyle='-') 

box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45) 
setp(box2['caps'],color='k',linewidth=2) 
setp(box2['boxes'],color='k',linewidth=2) 
setp(box2['medians'],color='k',linewidth=2) 
setp(box2['whiskers'],color='k',linewidth=2,linestyle='-') 

Изначально я надеялся, что панды будут индексировать ось х по имени столбца, но панды, кажется, индексация оси х в соответствии с положением колонки, что расстраивает. Может ли кто-нибудь рекомендовать метод смещения ящиков, чтобы они не лежали друг над другом?

ответ

3

Вы должны указать позиции брусков:

box1 = first.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.0,4.0,1.0)) 
box2 = second.boxplot(ax=ax,notch=False,widths=0.20,sym='',rot=-45, positions=np.arange(0.3,4.3,1.0)) 

Или вы могли бы переместить коробками на сторону вы порадовали (это есть Лишний держать этикетку центрированный):

disp = 0.15 
for k in box1.keys(): 
    for line1,line2 in zip(box1[k],box2[k]): 
     setp(line1,xdata=getp(line1,'xdata') - disp) 
     setp(line2,xdata=getp(line2,'xdata') + disp) 
+0

Спасибо xndrme, но цель состоит в том, чтобы иметь все в одном сюжете (то есть в том же подзаголовке). – tnknepp

+0

Я отредактировал ответ, надеюсь, что это поможет :) –

+0

О, спасибо. Это легко! – tnknepp

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