6

Tengo esta configuración actual:

def config_matplotlib(self):
    self.fig = Figure((130.0, 6.0), dpi=70, facecolor="#F6F4F2")
    self.canvas = FigureCanvas(self.fig)
    self.canvas.setParent(self.window.graphicsGroupBox)
    self.window.graphicsGridLayout.addWidget(self.canvas)
    self.graph_a = self.fig.add_subplot(311)
    self.graph_b = self.fig.add_subplot(312)
    self.graph_c = self.fig.add_subplot(313)

    self.graph_a.grid(True)
    self.graph_b.grid(True)
    self.graph_c.grid(True)

    self.graph_plot_a = self.graph_a.plot(
                [],
                linewidth=1,
                color=("darkorange"),
                )[0]
    self.graph_plot_b = self.graph_b.plot(
                [],
                linewidth=1,
                color=("darkorange"),
                )[0]
    self.graph_plot_c = self.graph_c.plot(
                [],
                linewidth=1,
                color=("darkorange"),
                )[0]

    ajust = {"top": 0.95,
            "bottom": 0.1,
            "right": 0.97,
            "left": 0.05,
            "wspace": 0.2,
            "hspace": 0.2,}
    self.fig.subplots_adjust(**ajust)

    #graficar (lo que se ve cuando se ejecuta el programa por)
    self.canvas.draw()

Da como resultado lo siguiente: introducir la descripción de la imagen aquí

Necesito obtener una gráfica con los estilos de línea y los límites iguales a los que tengo aquí: introducir la descripción de la imagen aquí

He revisado documentación y tutoriales y no encuentro cómo poner los estilos de línea, imprimir dos gráficos en un mismo plot, y adicionalmente meter texto, todo esto embebido, claro está, por que normalmente sé como se hace.

Quiero tener la configuración inicial con los límites establecidos, y lo otros ponerlo en una función update_plot().

2
  • 1
    En principio se hace de la misma forma "embebido" y "normal", empleando los métodos .plot() con los estilos de línea y .text(). ¿Puedes intentar eso y decirnos qué errores estás obteniendo?
    – user74
    Commented el 7 dic. 2015 a las 8:41
  • 1
    Prueba a poner el código completo. Según está parece que hay varias cosas mezcladas. self parece una instancia de Figure y luego vuelves a añadir self.fig que oarece que se refiere a otra instancia de Figure diferente. Commented el 20 feb. 2016 a las 18:07

1 respuesta 1

1
  1. Para los límites usa {tu gráfico}.axes.set_xlim([{desde}, {hasta}]) y {tu gráfico}.axes.set_ylim([{desde}, {hasta}]) para los limites
  2. para colocar líneas discontinuas usa '--' en la función plot como parámetro.
  3. Para plotear 2 gráficos usa {tu gráfico}.plot(data1, {argumentos para el primer gráfico}, data2, {argumentos para el segundo gráfico}, ...)

En la siguiente parte te muestro un ejemplo con tu función( he modificado algunas cosas por que no las encuentro declaradas en tu código)

import sys
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure


class Window(QWidget):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.layout = QVBoxLayout()
        self.setLayout(self.layout)
        self.config_matplotlib()

    def config_matplotlib(self):
        self.fig = Figure((130.0, 6.0), dpi=70, facecolor="#F6F4F2")

        self.canvas = FigureCanvas(self.fig)
        self.layout.addWidget(self.canvas)
        self.graph_a = self.fig.add_subplot(311)
        self.graph_b = self.fig.add_subplot(312)
        self.graph_c = self.fig.add_subplot(313)

        self.graph_a.grid(True)
        self.graph_a.axes.set_xlim([1, 3])
        self.graph_a.axes.set_ylim([0, 120])
        data1 = [10*(x-1)**2 for x in range(1, 5)]
        data2 = [-50 * (x - 4) for x in range(1, 5)]
        self.graph_a.plot(data1, '--', data2, '--')

        self.graph_b.grid(True)
        self.graph_b.axes.set_xlim([1, 3])
        self.graph_b.axes.set_ylim([0, 120])
        self.graph_b.plot(data1, '--')

        self.graph_c.grid(True)
        self.graph_c.axes.set_xlim([1, 3])
        self.graph_c.axes.set_ylim([0, 120])
        self.graph_c.plot(data2, '--')

        self.graph_plot_a = self.graph_a.plot(
            [],
            linewidth=1,
            color=("darkorange"),
        )[0]
        self.graph_plot_b = self.graph_b.plot(
            [],
            linewidth=1,
            color=("darkorange"),
        )[0]
        self.graph_plot_c = self.graph_c.plot(
            [],
            linewidth=1,
            color=("darkorange"),
        )[0]

        ajust = {"top": 0.95,
                 "bottom": 0.1,
                 "right": 0.97,
                 "left": 0.05,
                 "wspace": 0.2,
                 "hspace": 0.2, }
        self.fig.subplots_adjust(**ajust)

        # graficar (lo que se ve cuando se ejecuta el programa por)
        self.canvas.draw()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    main = Window()
    main.show()

    sys.exit(app.exec_())

introducir la descripción de la imagen aquí

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.