почему окно режет мой стол, когда я делаю подзаговор? - PullRequest
0 голосов
/ 20 апреля 2020

Привет, моя цель - создать график, а слева - небольшую таблицу с некоторыми параметрами этого графика.

Мой код такой:

# Fazer o grafico
    table_data= [ ['δ', str(round(self.novodelta,3))],
    ['k', str(round(k,3))],
    ['h', str(round(h,3))],   ]

    plt.subplot(2, 1, 1)
    plt.plot(self.Observacoes,T, '-o')
    plt.plot(self.Observacoes,C, '-o')
    plt.plot(self.Observacoes,Lim_inf_CUSUM)
    plt.plot(self.Observacoes,Lim_sup_CUSUM)
    the_table = plt.table(cellText=table_data,
                  loc="left")
    plt.title("CUSUM")
    plt.xlabel("Amostras")
    plt.legend(["T", "C", "Limite inferiror", "Limite Superior"],loc='upper center', bbox_to_anchor=(0.5, -0.12),fancybox=True, shadow=True, ncol=4)
    plt.xticks(np.arange(min(self.Observacoes), max(self.Observacoes)+1, 1.0))
    plt.tight_layout()


    observacoes=self.Observacoes
    plt.subplot(2, 1, 2)
    plt.plot(observacoes,E, '-o')
    plt.plot(observacoes,LC_EWMA)
    plt.plot(observacoes,LSC_EWMA)
    plt.plot(observacoes,LIC_EWMA)
    plt.title("EWMA")
    plt.xlabel("Amostras")
    plt.legend(["E", "LC", "Limite inferiror", "Limite Superior"],loc='upper center', bbox_to_anchor=(0.5, -0.15),fancybox=True, shadow=True, ncol=4)
    plt.xticks(np.arange(min(self.Observacoes), max(self.Observacoes)+1, 1.0))
    plt.tight_layout()

Output of my code

Как вы можете видеть, что таблица находится наверху оси Y, и окно обрезает первый столбец, я хотел бы исправить это, я имею в виду, что перед этим должно быть некоторое пространство Таблица и после таблицы второй график будет иметь другую таблицу, но я пытаюсь сделать это сначала

РЕДАКТИРОВАТЬ

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

РЕДАКТИРОВАТЬ 2

здесь это минимальный, воспроизводимый пример

import os
import sys
import matplotlib.pyplot as plt
from PyQt5 import uic, QtWidgets
import numpy as np
from matplotlib.gridspec import GridSpec
import statistics
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton



ui_path = os.path.dirname(os.path.abspath(__file__))
Ui_MainWindow, QtBaseClass = uic.loadUiType(os.path.join(ui_path, "problem.ui"))

class MyApp(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.title = 'PyQt5 button - pythonspot.com'
        self.left = 10
        self.top = 10
        self.width = 320
        self.height = 200
        self.initUI()

    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)
        button = QPushButton('PyQt5 button', self)

        button.clicked.connect(self.graph)

    def graph(self):
        self.values=[2,4,5,6]

        table_data= [ ['δ', 1],
    ['k', 2],
    ['h', 3],   ]

        plt.subplot(2, 1, 1)
        plt.plot(self.values,"-o")
        the_table = plt.table(cellText=table_data,
                  loc="left")
        plt.title("CUSUM")
        plt.xlabel("samples")
        plt.show()




if __name__ == "__main__":
    app =  QtWidgets.QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

Здесь вы можете увидеть ту же проблему:

введите описание изображения здесь

1 Ответ

0 голосов
/ 21 апреля 2020

Я нашел решение, но я не знаю, является ли оно лучшим.

В коде минимального воспроизводимого примера

Я создаю подзаговор с одной строкой и двумя столбцами Моя идея заключалась в том, чтобы построить первый столбец таблицы, а во втором - график

    plt.subplot(1, 2, 2)
    plt.plot(self.values,"-o")
    plt.title("CUSUM")
    plt.xlabel("samples")
    plt.subplot(1, 2, 1)
    the_table = plt.table(cellText=table_data,
                  loc="center") # tu put in the center 
    plt.axis('off') # turn off the axis and the outside box
    plt.show()

Вывод был:

введите описание изображения здесь

...