from pathlib import Path from typing import List import matplotlib.pyplot as pyplot from langfingaz import loadData from langfingaz import parseMeetings from langfingaz.parseMeetings import BbbStatus, Meeting from langfingaz.util import fileUtil def getDefaultPlotFolder() -> Path: return fileUtil.getProjectBaseDir().joinpath("plot") def plotMeetings(dataDir: Path = fileUtil.getProjectBaseDir().joinpath("data")): bbbStati: List[BbbStatus] = [] for file in dataDir.iterdir(): if file.name.endswith(".xml"): dataStr, t = loadData.loadData(file) meetings: List[Meeting] = parseMeetings.parseMeetingsData(dataStr) bbbStati.append(parseMeetings.BbbStatus(meetings, t)) sorted(bbbStati, key=BbbStatus.getKey) image: Path = doPlotMeetings(bbbStati) print("saved image at " + str(image)) def doPlotMeetings(bbbStati: List[BbbStatus]) -> Path: time = [] # x-axis: time participants = [] # yAxis (1) videos = [] # yAxis (2) voices = [] # yAxis (3) for bbbStatus in bbbStati: time.append(bbbStatus.pointOfTime) participants.append(bbbStatus.participantCount) videos.append(bbbStatus.videoCount) voices.append(bbbStatus.voiceParticipantCount) # Note that even in the OO-style, we use `.pyplot.figure` to create the figure. _a, _b = pyplot.subplots() # Create a figure and an axes. fig: pyplot.Figure = _a ax = _b # of type plt.axes.Axes ?? if not (issubclass(type(fig), pyplot.Figure)): raise ValueError("expected Figure") ax.plot(time, participants, label='participants') # Plot some data on the axes. ax.plot(time, videos, label='video') # Plot more data on the axes... ax.plot(time, voices, label='voice') # ... and some more. ax.set_xlabel('time') # Add an x-label to the axes. ax.set_ylabel('numbers') # Add a y-label to the axes. ax.set_title("BigBlueButton Statistics") # Add a title to the axes. ax.legend() # Add a legend. image: Path = getDefaultPlotFolder().joinpath( "{}_until_{}".format(fileUtil.asString(time[0]), fileUtil.asString(time[-1])) ) fig.savefig(image) # plt.show() return image if __name__ == '__main__': plotMeetings()