WedX - журнал о программировании и компьютерных науках

Как я могу разделить график pyqtgraph между разными графиками?

Я только начал с pyqt5 и работаю над графическим интерфейсом, и у меня возникла проблема с разделением графика между двумя разными графиками. Позвольте мне объяснить это более ясно. Допустим, у вас есть график1 и график2:

graph1 = PlotWidget()
graph2 = PlotWidget()

И вы создаете два отдельных графика для этих двух графиков:

plot1 = graph1.plot(name = 'plot1')
plot1.setData(x, y)
plot2 = graph2.plot(name = 'plot2')
plot2.setData(a, b)

Вы хотите отобразить сюжетные линии на этих двух графиках. Каждый отображает свое. Теперь вы хотите отобразить линию plot2 в окне graph1. Проблема здесь в том, что когда вы используете:

graph1.plotItem.addItem(item = plot2)

Когда я это делаю, plot2 действительно появляется на графике1, но исчезает с графика2. Удаление его обратно с графика1 также не возвращает его на график2. Я не понимаю, что здесь в корне неправильно. Могу ли я показать один и тот же график на обоих графиках? Почему он исчезает с графика2, когда я добавляю его на график1?


Ответы:


1

Проблема и объяснение

Как вы сказали, метод, который вы используете, чтобы делать то, что вы хотите, в корне неверен.

  • Метод plot() создает файл PlotDataItem. Это означает, что когда вы делаете это: plot1 = graph1.plot(), вы создаете экземпляр PlotDataItem и сохраняете его в переменной plot1. (Читайте документацию здесь)
  • PlotDataItem, как следует из его названия, является элементом, отдельным элементом. Если вы добавите этот предмет в другой PlotWidget с помощью метода addItem(), вы автоматически удалите его из другого и добавите в виджет судьбы.

Решение

Вы можете создать еще один экземпляр PlotDataItem, чтобы он действовал как копия исходного сюжета. Вы можете добавить (addItem()) и удалить (removeItem()) его из любого виджета. Если вы хотите, чтобы он отображал тот же график, тогда я предлагаю создать функцию, которая срабатывает при изменении данных скопированного графика. Таким образом, у вас может быть два связанных экземпляра PlotDataItem: один для исходного виджета, а другой для добавления/удаления внутри другого виджета.

Примечание. Метод removeItem() не удаляет элемент, он просто удаляет элемент из виджета, что означает, что вы можете снова добавить его в любой другой виджет.

Если ваши данные не изменятся, то нет необходимости создавать функцию, связывающую графики. Например:

plot3 = pg.PlotDataItem(name = 'Copy of plot2')
plot3.setData(a, b)
graph1.addItem(plot3) ## To add the PlotDataItem to the PlotWidget
graph1.removeItem(plot3)  ## To remove the PlotDataItem from the PlotWidget
09.02.2021
Новые материалы

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

Учебные заметки: создание моего первого пакета Node.js
Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..


Для любых предложений по сайту: [email protected]