Как построить линию с помощью Canvas / Matplotlib? - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь построить линию, используя холст и matplotlib.

У меня уже есть рисунок и все остальное. Но когда я пытаюсь использовать команду для построения графика (self.axes.plot ()), она не работает.

Кто-нибудь знает, что происходит ?? Возможно, мне не хватает какой-то детали, но я не могу ее найти !!

import sys
from PyQt5.QtWidgets import *
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib import pyplot as plt

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Plotting")
        self.setGeometry(50, 50, 700, 700)
        self.UI()
        self.show()

    def UI(self):
        # Cria o canvas para exibição dos entes da estrutura ------------------
        self.dpi = 70
        self.fig = Figure((5.0, 5.0), dpi=self.dpi, frameon=False, tight_layout=True)
        self.canvas = FigureCanvas(self.fig)
        self.axes = self.fig.add_subplot(111)

        # Cria grid de plotagem (axes) ----------------------------------------
        self.load_axes()

        layout = QGridLayout()

        layout.addWidget(self.canvas, 0, 0)

        self.setLayout(layout)

        self.plotar()

    def plotar(self):
        self.axes.clear()
        self.load_axes()
        self.axes.plot([0, 0], [1, 1], linestyle = '-', color = 'black', linewidth=5.5, zorder = 0)

        # Define a área de plotagem -------------------------------------------
        self.axes.relim()
        # Plota todas as linhas no canvas -------------------------------------
        self.fig.canvas.draw()

    def load_axes(self):
        self.axes.axis('equal')
        self.axes.set_xmargin(.4)
        self.axes.set_ymargin(.4)
        self.axes.autoscale_view(tight=True)
        self.axes.xaxis.set_major_locator(plt.MultipleLocator(5.0))
        self.axes.xaxis.set_minor_locator(plt.MultipleLocator(1.0))
        self.axes.yaxis.set_major_locator(plt.MultipleLocator(5.0))
        self.axes.yaxis.set_minor_locator(plt.MultipleLocator(1.0))
        self.axes.grid(which='major', axis='x', linewidth=0.75, linestyle='-', color='gainsboro')
        self.axes.grid(which='minor', axis='x', linewidth=0.50, linestyle='-', color='gainsboro')
        self.axes.grid(which='major', axis='y', linewidth=0.75, linestyle='-', color='gainsboro')
        self.axes.grid(which='minor', axis='y', linewidth=0.50, linestyle='-', color='gainsboro')


def main():
    App = QApplication(sys.argv)
    window = Window()
    sys.exit(App.exec_())

if __name__=='__main__':
    main()


1 Ответ

0 голосов
/ 30 мая 2020

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

Вы указали: self.axes.plot([0, 0], [1, 1], linestyle = '-', color = 'black', linewidth=5.5, zorder = 0)

это означает, что вы просите ось x отображать диапазон от 0 до 0, а ось y - отображать от 1 до 1. Попробуйте изменить его на это:

self.axes.plot([0, 1], [0, 1], linestyle = '-', color = 'black', linewidth=5.5, zorder = 0)

Это должна отображать вашу строку! : -D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...