0

我正在使用 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

但是当我执行它时,我会得到如下图所示的东西 在此处输入图像描述

有人可以建议我我做错了什么吗?我该如何解决?

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

4

1 回答 1

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

导致:

示例输出

有很多不同的选择。作为一个简单的示例,您可以设置back_pos成为dep_list[i]循环的最后一行。无论如何,我试图以一种非常不花哨和明确的方式来写它。我希望这会有所帮助。

PS:您可以使用i*0.1而不是0在第二个参数rect中使矩形垂直移动。编辑:输出变为:

在此处输入图像描述

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

于 2015-02-19T08:41:40.893 回答