2010-09-27 2 views
0

У меня есть набор данных, где каждое значение имеет координату (x, y). Различные значения могут иметь одну и ту же координату. И я хочу нарисовать их в прямоугольной коллекции ящиков.Ящики для рисования Matplotlib

Например, если у меня есть данные:

A -> (0, 0) 
B -> (0, 1) 
C -> (1, 2) 
D -> (0, 1) 

Я хочу, чтобы получить следующий рисунок:

0 1 2 
    +++++++++++++ 
0 + A + B + + 
    + + D + + 
    +++++++++++++ 
1 + + + C + 
    +++++++++++++ 
2 + + + + 
    +++++++++++++ 

Как я могу сделать это в Python с использованием Matplotlib?

СПАСИБО!

ответ

1
# enter the data like this 
X={'A':(0,0),'B':(0,1),'C':(1,2),'D':(0,1)} 

# size of grid 
xi=map(tuple.__getitem__,X.values(),[1]*len(X)) 
yi=map(tuple.__getitem__,X.values(),[0]*len(X)) 
xrng = (min(xi), max(xi)+1) 
yrng = (min(yi), max(yi)+1) 

for y in range(*yrng):   # rows 
    print '+' * ((xrng[1]-xrng[0])*3) + '+' 
    k={} # each item k[x] is list of elements in xth box in this row 
    for x in range(*xrng): 
    # list of items in this cell 
    k[x]=[u for u in X.keys() if X[u]==(y,x)] 
    h=max(map(len, k.values())) # row height 
    for v in range(h):   # lines of row 
    c=[] 
    for x in range(*xrng):  # columns 
     if k[x]: 
     c.append(k[x][0]) 
     del k[x][0] 
     else: c.append(' ') # shorter cell 
    s="+ " + "+ ".join(c) + "+" 
    print s 
print "+" * ((xrng[1]-xrng[0])*3) + '+' 
+0

Спасибо за код! – yassin

1

Возможно, было бы лучше использовать ReportLab.

Example

+0

Любая идея, как вставить несколько значений в одной клетке? – yassin

2

Просто подумал, что, может быть, что вы на самом деле хотели бы знать только это:

def drawbox(list,x,y): 
    # write some graphics code to draw box index x,y containing items 'list' 

[[drawbox(u,x,y) for u in X.keys() if X[u]==(y,x)] for x in range(0,3) for y in range(0,3)] 
Смежные вопросы