Introducción
Matplotlib es una popular biblioteca de Python para crear visualizaciones estáticas, animadas e interactivas en Python. En este laboratorio, aprenderá a integrar Matplotlib en una aplicación GTK3 e interactuar con una vista de árbol para almacenar datos.
Consejos sobre la VM
Una vez finalizada la inicialización de la VM, haga clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.
A veces, es posible que tenga que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de operaciones no puede automatizarse debido a las limitaciones de Jupyter Notebook.
Si tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje su retroalimentación después de la sesión y resolveremos el problema rápidamente para usted.
Configurar el entorno
Antes de comenzar, necesitamos configurar nuestro entorno. Empezaremos creando un nuevo archivo de Python e importando las bibliotecas necesarias.
import gi
gi.require_version('Gtk', '3.0')
gi.require_version('Gdk', '3.0')
from gi.repository import Gdk, Gtk
from numpy.random import random
from matplotlib.backends.backend_gtk3agg import FigureCanvas
from matplotlib.figure import Figure
Crear la ventana del administrador de datos
En este paso, crearemos la clase DataManager que hereda de la clase Gtk.Window. Esta clase se encargará de administrar los datos que queremos representar gráficamente.
class DataManager(Gtk.Window):
num_rows, num_cols = 20, 10
data = random((num_rows, num_cols))
Configurar la ventana
En este paso, configuraremos la ventana que mostrará nuestros datos. Empezaremos inicializando la ventana con un título y un tamaño.
def __init__(self):
super().__init__()
self.set_default_size(600, 600)
self.connect('destroy', lambda win: Gtk.main_quit())
self.set_title('GtkListStore demo')
self.set_border_width(8)
Agregar una etiqueta
En este paso, agregaremos una etiqueta a la ventana que le pedirá al usuario que haga doble clic en una fila para graficar los datos.
vbox = Gtk.VBox(homogeneous=False, spacing=8)
self.add(vbox)
label = Gtk.Label(label='Double click a row to plot the data')
vbox.pack_start(label, False, False, 0)
Agregar un TreeView
En este paso, agregaremos un TreeView a la ventana que mostrará nuestros datos. También crearemos un modelo para almacenar los datos.
sw = Gtk.ScrolledWindow()
sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN)
sw.set_policy(Gtk.PolicyType.NEVER, Gtk.PolicyType.AUTOMATIC)
vbox.pack_start(sw, True, True, 0)
model = self.create_model()
self.treeview = Gtk.TreeView(model=model)
self.treeview.connect('row-activated', self.plot_row)
sw.add(self.treeview)
self.add_columns()
Crear la gráfica de Matplotlib
En este paso, crearemos una gráfica de Matplotlib que mostrará nuestros datos. Empezaremos creando una figura y agregando un subgráfico.
fig = Figure(figsize=(6, 4))
self.canvas = FigureCanvas(fig)
vbox.pack_start(self.canvas, True, True, 0)
ax = fig.add_subplot()
Graficar los datos
En este paso, graficaremos la primera fila de nuestros datos en la gráfica de Matplotlib.
self.line, = ax.plot(self.data[0, :], 'go')
Implementar la funcionalidad de trazado
En este paso, implementaremos la funcionalidad para trazar los datos cuando se hace doble clic en una fila.
def plot_row(self, treeview, path, view_column):
ind, = path
points = self.data[ind, :]
self.line.set_ydata(points)
self.canvas.draw()
Agregar columnas al TreeView
En este paso, agregaremos columnas al TreeView que mostrarán nuestros datos.
def add_columns(self):
for i in range(self.num_cols):
column = Gtk.TreeViewColumn(str(i), Gtk.CellRendererText(), text=i)
self.treeview.append_column(column)
Crear el modelo
En este paso, crearemos el modelo que almacenará nuestros datos.
def create_model(self):
types = [float] * self.num_cols
store = Gtk.ListStore(*types)
for row in self.data:
store.append(tuple(row))
return store
Mostrar la ventana
En este paso, mostraremos la ventana que muestra nuestros datos.
manager = DataManager()
manager.show_all()
Gtk.main()
Resumen
En este laboratorio, aprendiste cómo integrar Matplotlib en una aplicación GTK3 y cómo interactuar con un treeview para almacenar datos. También aprendiste cómo trazar datos utilizando Matplotlib y cómo crear un modelo para almacenar datos en un treeview.