Matplotlib 绘制框

0 投票
3 回答
1486 浏览
提问于 2025-04-16 04:38

我有一组数据,每个数据都有一个(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) + '+'

撰写回答