0

I am a python beginner and am creating a GUI using PyQt5 and have run into a problem, please help.

This is a squarify graph's example

import pandas as pd
df = pd.DataFrame({'nb_people':[8,3,4,2], 'group':["group A", "group B", 
"group C", "group D"] })
squarify.plot(sizes=df['nb_people'], label=df['group'], alpha=.8 )
plt.axis('off')
plt.show()

And this is a function that I'm calling on button click which is plotting a random graph.

def plot(self):

    # random data
    data = [random.random() for i in range(10)]

    # instead of ax.hold(False)
    self.figure.clear()

    # create an axis
    ax = self.figure.add_subplot(111)

    # plot data
    ax.plot(data, '*-')

    # refresh canvas
    self.canvas.draw()

How to plot that squarify graph on this GUI?

eyllanesc
  • 235,170
  • 19
  • 170
  • 241
Shreyash Sharma
  • 310
  • 2
  • 11

1 Answers1

2

squarify.plot() has an argument called ax which is the axes where it will be drawn.

import sys
import random
import pandas as pd

import matplotlib
matplotlib.use('Qt5Agg')
from PyQt5 import QtCore, QtWidgets
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure

import squarify

class Widget(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        QtWidgets.QWidget.__init__(self, *args, **kwargs)
        self.figure = Figure(figsize=(5, 4), dpi=100)
        self.canvas = FigureCanvas(self.figure)
        self.canvas.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)

        button = QtWidgets.QPushButton("random plot")
        button.clicked.connect(self.plot)

        lay = QtWidgets.QVBoxLayout(self)
        lay.addWidget(self.canvas)
        lay.addWidget(button)
        self.plot()

    def plot(self):
        self.figure.clear()
        df = pd.DataFrame({'nb_people':[random.randint(1, 10) for i in range(4)], 'group':["group A", "group B", "group C", "group D"] })
        ax = self.figure.add_subplot(111)
        squarify.plot(sizes=df['nb_people'], label=df['group'], alpha=.8 ,ax=ax)
        ax.axis('off')
        self.canvas.draw()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())

enter image description here

eyllanesc
  • 235,170
  • 19
  • 170
  • 241