Динамическое обновление графика в Matplotlib, генерирующее странные строкиLinux

Ответить
Anonymous
 Динамическое обновление графика в Matplotlib, генерирующее странные строки

Сообщение Anonymous »

Я пытаюсь динамически добавлять прямоугольники на график с помощью Matplotlib, но на графике появляются странные линии.
Изображение

Моя сетка — это класс с инициализацией и функцией обновления для добавления на график новых прямоугольных фигур

Код: Выделить всё

class GridDisplay:
def __init__(self):
# initialize and configure the plot

def UpdatePlotWithIndicesCoords(self, layerID, newData):
# update the plot with a new rectangle
Определения функций показаны во фрагменте кода ниже

Код: Выделить всё

def UpdatePlotWithIndicesCoords(self, layerID, newData):

x0 = newData[0]
x1 = newData[2]
y0 = round(newData[1], 6)
y1 = round(newData[3], 6)

height = round(y1 - y0, 6)
width = round(x1 - x0, 6)

y = y0

x = x0

self.rectangles.append((x, y, width, height))

self.graph.remove()

rectangle = plt.Rectangle((x, y), width, height, edgecolor='yellow', facecolor=layerID, lw=1)

self.ax.add_patch(rectangle)

self.graph = self.ax.plot(self.rectangles)[0]

Код: Выделить всё

def __init__(self):

ySize = 15
xSize = 25
xStart = -6
yStart = -6
xEnd = 5
yEnd = 5

self.fig, self.ax = plt.subplots(figsize=(xSize, ySize))

# Set axis limits
self.ax.set_ylim( yStart, yEnd)
self.ax.set_xlim(xStart, xEnd)

# Change major ticks to show every 0.5
self.ax.xaxis.set_major_locator(MultipleLocator(0.5))
self.ax.yaxis.set_major_locator(MultipleLocator(0.5))

# Change minor ticks to show every 0.1
self.ax.xaxis.set_minor_locator(AutoMinorLocator(0.1))
self.ax.yaxis.set_minor_locator(AutoMinorLocator(0.5))

# Turn grid on for both major and minor ticks and style minor slightly
# differently.
self.ax.grid(which='major', color='#CCCCCC', linestyle='--')
self.ax.grid(which='minor', color='#CCCCCC', linestyle=':')

# Set labels and title

self.ax.set_xlabel('h')

self.ax.set_ylabel('v')

self.ax.set_title('S-Cell Routing grid')

# Set grid

self.ax.grid(True)

self.rectangles = []

self.graph = self.ax.plot(self.rectangles)[0]
Функция UpdatePlotWithIndicesCoords вызывается из другого пакета, который просто определяет координаты границы прямоугольника (x0, y0, x1, y1), как показано во фрагменте ниже

Код: Выделить всё

self.gridDisplay.UpdatePlotWithIndicesCoords(layerID, (startX, startY, endX, endY))
Параметр LayerID используется для указания цвета прямоугольника и не так важен для задачи.
Показанное изображение созданный на основе приведенного ниже кода, который демонстрирует проблему.

Код: Выделить всё

import bin.ui.display as GridDisplay

gridDisplay = GridDisplay()

startX = -5
startY = -5

for i in range(1, 6):

layer = str('Metal') + str(i)

newData = (startX + round(i*0.2, 6), startY + round(i*0.5, 6), startX + round(i*0.6, 6), startY + round(i*0.7, 6))

gridDisplay.UpdatePlotWithBoundboxCoords(layer, newData)
Я не уверен, что делаю неправильно, но не могу понять, почему строятся случайные линии.
Я Я просмотрел документацию и сообщения о динамическом построении фигур с помощью Matplotlib, но ни одно из решений, похоже, не работает.
Кстати, я также включил интерактивный режим для Matplotlib plt.ion( )
Спасибо и с уважением.

Подробнее здесь: https://stackoverflow.com/questions/787 ... ange-lines
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»