Matplotlib 绘制框
我有一组数据,每个数据都有一个(x, y)坐标。不同的数据可能会有相同的坐标。我想把它们画在一个矩形的框框里。
比如说,如果我的数据是:
A -> (0, 0)
B -> (0, 1)
C -> (1, 2)
D -> (0, 1)
我想得到下面这样的图:
0 1 2
+++++++++++++
0 + A + B + +
+ + D + +
+++++++++++++
1 + + + C +
+++++++++++++
2 + + + +
+++++++++++++
我该怎么用Python和Matplotlib来实现呢?
谢谢!
3 个回答
1
也许使用ReportLab会更好。
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)]
1
在编程中,有时候我们会遇到一些问题,特别是当我们在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期工作。这个时候,查看相关的讨论或者问答平台,比如StackOverflow,就能找到很多有用的信息和解决方案。
在这些讨论中,大家会分享自己的经验,说明他们是如何解决类似问题的,或者提供一些建议和技巧。这些信息通常会包含一些代码示例,帮助我们更好地理解问题所在,以及如何去修复它。
总之,遇到问题时,不要着急,先看看别人是怎么解决的,学习他们的思路和方法,这样能帮助我们更快地找到解决方案。
# 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) + '+'