用PyX绘制系列矩形

时间:2015-02-18 17:23:10

标签: python python-3.x drawing pyx

我正在使用PyX并尝试创建一系列矩形,以便每个下一个矩形必须从最后一个矩形结束的位置开始。代码如下:

//使用索引i开始循环

back_pos = dep_list[i-1]
front_pos = list[i]
c.stroke(path.rect(back_pos, 0, front_pos, 1))

以下是列表中的一些值。基本上,该列表包含不断增加的数字顺序。

back_pos =  0.04  front_pos =  0.04
back_pos =  0.04  front_pos =  0.21
back_pos =  0.21  front_pos =  0.21
back_pos =  0.21  front_pos =  0.57
back_pos =  0.57  front_pos =  0.72

但是当我执行它时,我会得到一些像下面这样的图片 enter image description here

有人可以告诉我,我做错了什么吗?我该如何解决?

p.s我在该代码中更改了Y轴,以便可以看到矩形的起点和终点。 谢谢:))

1 个答案:

答案 0 :(得分:0)

你写的dep_list包含一个增加数字的列表,因此我猜它包含矩形的结束位置。另外,请注意rect的第三个参数是矩形的宽度,而不是结束位置。因此,完整的代码可能如下所示:

from pyx import *

dep_list = [0.04, 0.21, 0.21, 0.57, 0.72]

c = canvas.canvas()

back_pos = 0
for i in range(len(dep_list)):
    if i == 0:
        width = dep_list[i]
    else:
        width = dep_list[i] - dep_list[i-1]
    c.stroke(path.rect(back_pos, 0, width, 1))
    back_pos += width

c.writePDFfile()

导致:

example output

有很多选择可以区别对待。举个简单示例,您可以将back_pos设置为循环中最后一行的dep_list[i]。无论如何,我试图以非常不明智和明确的方式写它。我希望有所帮助。

PS:您可以在i*0.1的第二个参数处使用0代替rect来获取垂直移动的rects。编辑:输出变为:

enter image description here

PPS:由于您的列表包含0.21两次,因此一个矩形的宽度为零。