Matplotlib adding graph widgets

Date: March 5th 2016
Last updated: March 5th 2016

This code was generated while I was trying to replace ax properties of a matplotlib graph in kivy. However, on my way to figuring out a solution I managed to continously add widgets to a kivy window. Im not sure why you would want to do this, but here it is anyway. Perhaps I might need it in the future.

In this example I have used the random.gauss function to create a histogram and a probability density function. As the numbers were derived randomly, each figure looks marginally different.

Adds graphs to widget position on every click.
None of the graphs are removed.
import matplotlib
import matplotlib.pyplot as plt
from import FigureCanvas
import kivy
from import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.button import Button
import matplotlib.mlab as mlab
from random import gauss
import numpy as np

class DrawPlot(BoxLayout):
    def __init__(self, **kwargs):
        super(DrawPlot, self).__init__(**kwargs)

    def get_data(self):
        x = [gauss(100, 15) for i in range(100)]
        return x

    def draw_my_plot(self):
        fig, ax = plt.subplots()
        x = self.get_data()
        n, bins, patches = ax.hist(x, 50, normed=1, facecolor='white', alpha=0.3)
        pdf = mlab.normpdf(bins, 100, 15)
        ax.plot(bins, pdf, 'r-', linewidth=2)
        canvas =  FigureCanvas(figure=fig)
        self.add_widget(canvas, 1) #<==== This adds a graph above the first row (index=1)

    def callback(self):
        self.draw_my_plot() #<=== add additional widgets on click

class SampleApp(App):
    def build(self):
        return DrawPlot()

if __name__ == '__main__':


#:kivy 1.9.1
    orientation: 'vertical'

        orientation: 'vertical'
        size_hint: 1, None
        height: main_title.height

            id: main_title
            text: "Plotting using Matplotlib in Kivy"
            font_size: '35sp'
            size_hint: 1, None
            height: self.height

            size_hint_x: 0.8
            source: root.draw_my_plot() #<=== initial plot placement

        orientation: 'horizontal'
        size_hint: 1, None
        height: playbutton.height
            id: playbutton
            text: 'play'
            size_hint: 1, None
            height: self.height
            on_press: root.callback() #<==== adds a plot on every click
            text: 'reset'
            size_hint: 1, None
            text: 'quit'
            size_hint: 1, None

In this screenshot I have clicked 'play' twice which as added 2 addition graphs to the widget space. The reset and quit buttons do nothing.

adding multiple graphs to a widget space in kivy screenshot

results matching ""

    No results matching ""