У меня возникают проблемы с обновлением списка размеров N, содержащего объекты Rectangles из matplotlib. Я сделал, я создал фиктивный прямоугольник и создал список из N фиктивных прямоугольников. Затем я хотел выполнить итерацию по циклу, чтобы изменить ширину и высоту каждого x, y индекса. Первая итерация цикла показывает, что значения менялись, но когда я повторяю один и тот же список во втором цикле, значения показывают только атрибуты, которые были оставлены на последней итерации в первом цикле (пример показан ниже).Обновление списка matplotlib.patches.Rectangle
Вот код, я работаю над:
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.patches import Rectangle
from matplotlib.collections import PatchCollection
N = 5
dummyRect = Rectangle((None, None), None, None)
patches = [dummyRect] * N
for i in xrange(N):
x0 = (int(np.random.randint(25, size = 1)))
y0 = (int(np.random.randint(25, size = 1)))
w = (int(np.random.randint(10, size = 1)) + 1) # avoiding zeroes
h = (int(np.random.randint(10, size = 1)) + 1)
print "Index: %s, x0: %s, y0: %s, w: %s, h: %s" % (i, x0, y0, w, h)
patches[i].set_x(x0)
patches[i].set_y(y0)
patches[i].set_width(w)
patches[i].set_height(h)
print "XY:%s, Width: %s, Height: %s" % (patches[i].get_xy(), patches[i].get_width(), patches[i].get_height())
print
print "__________________________________"
for x in patches:
print "XY:%s, Width: %s, Height: %s" % (x.get_xy(), x.get_width(), x.get_height())
Выход:
Index: 0, x0: 9, y0: 21, w: 4, h: 3
XY:(9, 21), Width: 4, Height: 3
Index: 1, x0: 9, y0: 24, w: 1, h: 7
XY:(9, 24), Width: 1, Height: 7
Index: 2, x0: 4, y0: 23, w: 7, h: 1
XY:(4, 23), Width: 7, Height: 1
Index: 3, x0: 4, y0: 20, w: 3, h: 9
XY:(4, 20), Width: 3, Height: 9
Index: 4, x0: 2, y0: 13, w: 1, h: 9
XY:(2, 13), Width: 1, Height: 9
__________________________________
XY:(2, 13), Width: 1, Height: 9
XY:(2, 13), Width: 1, Height: 9
XY:(2, 13), Width: 1, Height: 9
XY:(2, 13), Width: 1, Height: 9
XY:(2, 13), Width: 1, Height: 9
Как вы можете видеть, на выходе имеет значения из последней итерации в первом цикле. Кто-нибудь знает, что я делаю неправильно здесь? Эта же концепция будет работать на Java, я полагаю, но, возможно, не в Python?
Благодарим за помощь!
Спасибо! Это работало именно так, как я этого хотел. Спасибо за ваше время и помощь. –
Для потомков: похоже, что это больше не работает (по крайней мере, на '1.5.1'), где аргумент' TypeError: float() должен быть строкой или числом 'возникает при передаче' None'. – DilithiumMatrix