2010-09-27 106 views
0

我有一組數據,其中每個值都有一個(x,y)座標。不同的值可以具有相同的座標。我想把它們畫成矩形的盒子。Matplotlib繪製框

舉例來說,如果我有數據:

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

我想要得到下圖:使用Matplotlib

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

我怎麼能做到這一點在Python?

謝謝!

回答

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 2010-09-27 16:29:36

1

也許最好使用ReportLab。

Example

+0

任何想法如何在同一個單元格中插入多個值嗎? – yassin 2010-09-27 16:07:38

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