1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- '''
- Created on May 15, 2017
- @author: Bart
- '''
- import matplotlib.pyplot as plt
- import json
- from plot import Color, LineStyle
- class MatPlotLibWrapper:
-
- def visualize(self, plots):
- i = 1
- for plot in plots:
- plot = json.loads(plot)
- # create a new subplot
- plt.subplot(len(plots), 1, i)
- # do all datasets for this subplot
- for dataset in plot['datasets']:
- stylecode = ""
- if dataset['color'] != None or dataset['linestyle'] != None:
- stylecode = MatPlotLibWrapper.__color_code(dataset['color'])+MatPlotLibWrapper.__linestyle_code(dataset['linestyle'])
- # plot data with code and style
- plt.plot([p['x'] for p in dataset['datapoints']],
- [p['y'] for p in dataset['datapoints']],
- stylecode)
- # set title
- if plot['title'] != None:
- plt.title(plot['title'])
- # set x and y axis labels
- if plot['x']['unit']:
- plt.xlabel("%s (%s)" % (plot['x']['name'], plot['x']['unit']))
- else:
- plt.xlabel("%s" % plot['x']['name'])
- if plot['y']['unit']:
- plt.ylabel("%s (%s)" % (plot['y']['name'], plot['y']['unit']))
- else:
- plt.ylabel("%s" % plot['y']['name'])
- # make legend
- if plot['legend']:
- plt.legend([ds['legend'] for ds in plot['datasets']])
- # set axis ranges
- if plot['x']['lim_low'] != None and plot['x']['lim_high'] != None:
- plt.xlim([plot['x']['lim_low'], plot['x']['lim_high']])
- if plot['y']['lim_low'] != None and plot['y']['lim_high'] != None:
- plt.ylim([plot['y']['lim_low'], plot['y']['lim_high']])
- i += 1
- plt.show()
-
- @staticmethod
- def __color_code(color):
- if color == Color.BLUE:
- return "b"
- elif color == Color.GREEN:
- return "g"
- elif color == Color.RED:
- return "r"
- elif color == Color.CYAN:
- return "c"
- elif color == Color.MAGENTA:
- return "m"
- elif color == Color.YELLOW:
- return "y"
- elif color == Color.BLACK:
- return "k"
- elif color == Color.WHITE:
- return "w"
- else:
- return MatPlotLibWrapper.__color_code(Color.BLUE)
-
- @staticmethod
- def __linestyle_code(linestyle):
- if linestyle == LineStyle.SOLID:
- return "-"
- elif linestyle == LineStyle.DASHDOT:
- return "-."
- elif linestyle == LineStyle.DASHED:
- return "--"
- elif linestyle == LineStyle.DOTTED:
- return ":"
- elif linestyle == LineStyle.PIXEL:
- return ","
- elif linestyle == LineStyle.POINT:
- return "."
- elif linestyle == LineStyle.CIRCLE:
- return "o"
- elif linestyle == LineStyle.STAR:
- return "*"
- elif linestyle == LineStyle.PLUS:
- return "+"
- elif linestyle == LineStyle.X:
- return "x"
- else:
- return MatPlotLibWrapper.__linestyle_code(LineStyle.CIRCLE)
-
|