def plot_watertxtcmp_parameter(self, watertxt_data1, watertxt_data2, filename1, filename2, name): """ Plot a parameter from a WATER.txt file """ self.reset_watertxtcmp_plot() dates = watertxt_data1["dates"] parameter1 = watertxt.get_parameter(watertxt_data = watertxt_data1, name = name) parameter2 = watertxt.get_parameter(watertxt_data = watertxt_data2, name = name) assert parameter1 is not None, "Parameter name {} is not in watertxt_data".format(name) assert parameter2 is not None, "Parameter name {} is not in watertxt_data".format(name) # calculate the difference diff = parameter2["data"] - parameter1["data"] # plot parameters on axes1 self.axes1.plot(dates, parameter1["data"], color = "b", label = filename1 + ": " + parameter1["name"], linewidth = 2) self.axes1.hold(True) self.axes1.plot(dates, parameter2["data"], color = "r", label = filename2 + ": " + parameter2["name"], linewidth = 2) # plot the difference on axes2 self.axes2.plot(dates, diff, color = "k", linewidth = 2) # add title, labels, legend self.axes1.set_title(parameter1["name"]) self.axes2.set_xlabel("Date") self.axes2.set_ylabel("Difference") handles1, labels1 = self.axes1.get_legend_handles_labels() legend1 = self.axes1.legend(handles1, labels1, fancybox = True) legend1.get_frame().set_alpha(0.5) legend1.draggable(state=True) # show text of mean, max, min values on graph; use matplotlib.patch.Patch properies and bbox text1 = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format(parameter1["mean"], parameter1["max"], parameter1["min"]) text2 = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format(parameter2["mean"], parameter2["max"], parameter2["min"]) text_diff = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format(nanmean(diff), np.max(diff), np.min(diff)) patch_properties1 = {"boxstyle": "round", "facecolor": "b", "alpha": 0.5} patch_properties2 = {"boxstyle": "round", "facecolor": "r", "alpha": 0.5} patch_properties_diff = {"boxstyle": "round", "facecolor": "wheat", "alpha": 0.5} self.axes1.text(0.02, 0.95, text1, transform = self.axes1.transAxes, fontsize = 12, verticalalignment = "top", horizontalalignment = "left", bbox = patch_properties1) self.axes1.text(0.02, 0.45, text2, transform = self.axes1.transAxes, fontsize = 12, verticalalignment = "top", horizontalalignment = "left", bbox = patch_properties2) self.axes2.text(0.02, 0.95, text_diff, transform = self.axes2.transAxes, fontsize = 12, verticalalignment = "top", horizontalalignment = "left", bbox = patch_properties_diff) # use a more precise date string for the x axis locations in the toolbar and rotate labels self.axes2.fmt_xdata = mdates.DateFormatter("%Y-%m-%d") # rotate and align the tick labels so they look better self.figure.autofmt_xdate() # draw the plot self.canvas.draw()
def plot_watertxt_parameter(self, watertxt_data, name): """ Plot a parameter from a WATER.txt file """ self.reset_watertxt_plot() self.dates = watertxt_data["dates"] self.watertxt_data = watertxt_data self.parameter = watertxt.get_parameter(watertxt_data, name = name) assert self.parameter is not None, "Parameter name {} is not in watertxt_data".format(name) self.axes.set_title("Parameter: {}".format(self.parameter["name"])) self.axes.set_xlabel("Date") ylabel = "\n".join(wrap(self.parameter["name"], 60)) self.axes.set_ylabel(ylabel) # get proper color that corresponds to parameter name self.color_str = self.colors_dict[name.split('(')[0].strip()] # plot parameter self.axes.plot(self.dates, self.parameter["data"], color = self.color_str, label = self.parameter["name"], linewidth = 2) # legend; make it transparent handles, labels = self.axes.get_legend_handles_labels() legend = self.axes.legend(handles, labels, fancybox = True) legend.get_frame().set_alpha(0.5) legend.draggable(state=True) # show text of mean, max, min values on graph; use matplotlib.patch.Patch properies and bbox text = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format(self.parameter["mean"], self.parameter["max"], self.parameter["min"]) patch_properties = {"boxstyle": "round", "facecolor": "wheat", "alpha": 0.5} self.axes_text = self.axes.text(0.05, 0.95, text, transform = self.axes.transAxes, fontsize = 14, verticalalignment = "top", horizontalalignment = "left", bbox = patch_properties) # use a more precise date string for the x axis locations in the toolbar and rotate labels self.axes.fmt_xdata = mdates.DateFormatter("%Y-%m-%d") # rotate and align the tick labels so they look better; note that self.figure.autofmt_xdate() does not work because of the radio button axes for label in self.axes.get_xticklabels(): label.set_ha("right") label.set_rotation(30) # draw the plot self.canvas.draw()
def plot_watertxtcmp_parameter(self, watertxt_data1, watertxt_data2, filename1, filename2, name): """ Plot a parameter from a WATER.txt file """ self.reset_watertxtcmp_plot() dates = watertxt_data1["dates"] parameter1 = watertxt.get_parameter(watertxt_data=watertxt_data1, name=name) parameter2 = watertxt.get_parameter(watertxt_data=watertxt_data2, name=name) assert parameter1 is not None, "Parameter name {} is not in watertxt_data".format( name) assert parameter2 is not None, "Parameter name {} is not in watertxt_data".format( name) # calculate the difference diff = parameter2["data"] - parameter1["data"] # plot parameters on axes1 self.axes1.plot(dates, parameter1["data"], color="b", label=filename1 + ": " + parameter1["name"], linewidth=2) self.axes1.hold(True) self.axes1.plot(dates, parameter2["data"], color="r", label=filename2 + ": " + parameter2["name"], linewidth=2) # plot the difference on axes2 self.axes2.plot(dates, diff, color="k", linewidth=2) # add title, labels, legend self.axes1.set_title(parameter1["name"]) self.axes2.set_xlabel("Date") self.axes2.set_ylabel("Difference") handles1, labels1 = self.axes1.get_legend_handles_labels() legend1 = self.axes1.legend(handles1, labels1, fancybox=True) legend1.get_frame().set_alpha(0.5) legend1.draggable(state=True) # show text of mean, max, min values on graph; use matplotlib.patch.Patch properies and bbox text1 = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format( parameter1["mean"], parameter1["max"], parameter1["min"]) text2 = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format( parameter2["mean"], parameter2["max"], parameter2["min"]) text_diff = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format( nanmean(diff), np.max(diff), np.min(diff)) patch_properties1 = { "boxstyle": "round", "facecolor": "b", "alpha": 0.5 } patch_properties2 = { "boxstyle": "round", "facecolor": "r", "alpha": 0.5 } patch_properties_diff = { "boxstyle": "round", "facecolor": "wheat", "alpha": 0.5 } self.axes1.text(0.02, 0.95, text1, transform=self.axes1.transAxes, fontsize=12, verticalalignment="top", horizontalalignment="left", bbox=patch_properties1) self.axes1.text(0.02, 0.45, text2, transform=self.axes1.transAxes, fontsize=12, verticalalignment="top", horizontalalignment="left", bbox=patch_properties2) self.axes2.text(0.02, 0.95, text_diff, transform=self.axes2.transAxes, fontsize=12, verticalalignment="top", horizontalalignment="left", bbox=patch_properties_diff) # use a more precise date string for the x axis locations in the toolbar and rotate labels self.axes2.fmt_xdata = mdates.DateFormatter("%Y-%m-%d") # rotate and align the tick labels so they look better self.figure.autofmt_xdate() # draw the plot self.canvas.draw()
def plot_watertxt_parameter(self, watertxt_data, name): """ Plot a parameter from a WATER.txt file """ self.reset_watertxt_plot() self.dates = watertxt_data["dates"] self.watertxt_data = watertxt_data self.parameter = watertxt.get_parameter(watertxt_data, name=name) assert self.parameter is not None, "Parameter name {} is not in watertxt_data".format( name) self.axes.set_title("Parameter: {}".format(self.parameter["name"])) self.axes.set_xlabel("Date") ylabel = "\n".join(wrap(self.parameter["name"], 60)) self.axes.set_ylabel(ylabel) # get proper color that corresponds to parameter name self.color_str = self.colors_dict[name.split('(')[0].strip()] # plot parameter self.axes.plot(self.dates, self.parameter["data"], color=self.color_str, label=self.parameter["name"], linewidth=2) # legend; make it transparent handles, labels = self.axes.get_legend_handles_labels() legend = self.axes.legend(handles, labels, fancybox=True) legend.get_frame().set_alpha(0.5) legend.draggable(state=True) # show text of mean, max, min values on graph; use matplotlib.patch.Patch properies and bbox text = "mean = {:.2f}\nmax = {:.2f}\nmin = {:.2f}".format( self.parameter["mean"], self.parameter["max"], self.parameter["min"]) patch_properties = { "boxstyle": "round", "facecolor": "wheat", "alpha": 0.5 } self.axes_text = self.axes.text(0.05, 0.95, text, transform=self.axes.transAxes, fontsize=14, verticalalignment="top", horizontalalignment="left", bbox=patch_properties) # use a more precise date string for the x axis locations in the toolbar and rotate labels self.axes.fmt_xdata = mdates.DateFormatter("%Y-%m-%d") # rotate and align the tick labels so they look better; note that self.figure.autofmt_xdate() does not work because of the radio button axes for label in self.axes.get_xticklabels(): label.set_ha("right") label.set_rotation(30) # draw the plot self.canvas.draw()