예제 #1
0
    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()
예제 #2
0
    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()
예제 #3
0
    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()
예제 #4
0
    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()