Пример #1
0
    figObject.simulationCollection[k].setLineWidth(
        matplotlib.rcParams["lines.linewidth"] * 1.5)
    figObject.simulationCollection[k].setColor(
        Colorful.getDistinctColorList("green"))

figObject.simulationCollection["RadDamp"].setColor(
    Colorful.getDistinctColorList("red"))
lwpYlimit = 60
iwpYlimit = 21
yPositionFrac = 0.91

# figA
ax = fig.getAxes(0)
for k in simulationList.getIce0Simulations():
    Plot.getTimeseries(ax,
                       figObject.simulationCollection[k],
                       "lwp_bar",
                       conversionFactor=1000.)
PlotTweak.setAnnotation(ax,
                        "a) ICE0 liquid water path",
                        xPosition=0.2,
                        yPosition=lwpYlimit * yPositionFrac)

# figB
ax = fig.getAxes(2)
for k in simulationList.getIce1Simulations():
    Plot.getTimeseries(ax,
                       figObject.simulationCollection[k],
                       "lwp_bar",
                       conversionFactor=1000.)
PlotTweak.setAnnotation(ax,
                        "b) ICE1 liquid water path",
Пример #2
0
    def figure2(self):

        # create figure object
        fig = Figure(self.figurefolder,"figure2", ncols = 2, nrows = 3)

        simulationList = Figure2SimulationList()

        for k in simulationList.getAllSimulations():
            try:
                self.simulationCollection[k].getTSDataset()
                self.simulationCollection[k].setTimeCoordToHours()
            except FileNotFoundError:
                if "ovchinnikov" in str(self.simulationCollection[k].getFolder()).lower():
                    print("Ovchinnikov data is not available. Continue with existing simulations")
                    continue
                else:
                    print("{0} data missing from {1}, make sure you have set your \
                          folder and environment variables correctly".format(k, self.simulationCollection[k].getFolder()))

            if self.simulationCollection[k].getLabel() == "BULK":
                self.simulationCollection[k].setZorder(1)
            elif self.simulationCollection[k].getLabel() == "BIN":
                self.simulationCollection[k].setZorder(2)
            else:
                self.simulationCollection[k].setZorder(3)

        for k in simulationList.getUCLALESSALSASimulations():
            self.simulationCollection[k].setLineWidth(matplotlib.rcParams["lines.linewidth"]*1.5)
            self.simulationCollection[k].setColor(Colorful.getDistinctColorList("green"))

        lwpYlimit = 60
        iwpYlimit = 21
        yPositionFrac = 0.91

        # figA
        ax = fig.getAxes(0)
        for k in simulationList.getIce0Simulations():
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "lwp_bar", conversionFactor=1000.)
        PlotTweak.setAnnotation(ax, "a) ICE0 liquid water path", xPosition=0.2, yPosition= lwpYlimit*yPositionFrac)

        # figB
        ax = fig.getAxes(2)
        for k in simulationList.getIce1Simulations():
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "lwp_bar", conversionFactor=1000.)
        PlotTweak.setAnnotation(ax, "b) ICE1 liquid water path", xPosition=0.2, yPosition= lwpYlimit*yPositionFrac)

        # figC
        ax = fig.getAxes(3)
        for k in simulationList.getIce1Simulations():
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "iwp_bar", conversionFactor=1000.)
        PlotTweak.setAnnotation(ax, "c) ICE1 ice water path", xPosition=0.2, yPosition= iwpYlimit*yPositionFrac)

        # figD
        ax = fig.getAxes(4)
        for k in simulationList.getIce4Simulations():
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "lwp_bar", conversionFactor=1000.)
        PlotTweak.setAnnotation(ax, "d) ICE4 liquid water path", xPosition=0.2, yPosition= lwpYlimit*yPositionFrac)

        # figE
        ax = fig.getAxes(5)
        for k in simulationList.getIce4Simulations():
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "iwp_bar", conversionFactor=1000.)
        PlotTweak.setAnnotation(ax, "e) ICE4 ice water path", xPosition=0.2, yPosition= iwpYlimit*yPositionFrac)

        for i in [0,2,4]: #LWP figures
            ax = fig.getAxes(i)
            end = lwpYlimit
            PlotTweak.setYaxisLabel(ax,"LWP", "g\ m^{-2}")
            PlotTweak.setYLim(ax, end = end)
            ticks = PlotTweak.setYticks(ax, end = end, interval = 2)
            shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 10)
            PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        for i in [1,3,5]: #IWP figures
            ax = fig.getAxes(i)
            PlotTweak.setYaxisLabel(ax,"IWP", "g\ m^{-2}")
            end = iwpYlimit
            PlotTweak.setYLim(ax, end = end)
            ticks = PlotTweak.setYticks(ax, end = end, interval = 1)
            shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 3)
            PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        for i in [0,2,3,4,5]: #all timeseries figures
            ax = fig.getAxes(i)
            end = 8
            PlotTweak.setXLim(ax, end = end)
            Plot.getVerticalLine(ax, 2)

            if i in [4,5]:
                PlotTweak.setXaxisLabel(ax,"Time", "h")
            else:
                 PlotTweak.setXaxisLabel(ax,"")
                 PlotTweak.hideXTickLabels(ax)

            ticks = PlotTweak.setXticks(ax, end = end, interval = 0.5, integer=False)
            ticks = [int(k) for k in  ticks]
            shownLabelsBoolean = PlotTweak.setXLabels(ax, ticks, end = end, interval = 2)
            PlotTweak.setXTickSizes(ax, shownLabelsBoolean)

        # empty space
        ax = fig.getAxes(1)
        ax.axis("off")
        legend_elements = [Patch(facecolor=self.simulationCollection["ICE0_8h"].getColor(),
                             label='UCLALES-SALSA'),
                       Patch(facecolor=self.simulationCollection["SAM-bin_ice0"].getColor(),
                             label='BIN'),
                       Patch(facecolor=self.simulationCollection["COSMO_ice0"].getColor(),
                             label='BULK')]

        ax.legend(handles=legend_elements, loc='center', frameon = True, framealpha = 1.0)

        fig.save()
Пример #3
0
def main(simulationDataFrameCSVFile):

    simulationDataFrame = pandas.read_csv(simulationDataFrameCSVFile)

    # set simulation data as dictionary
    simulationCollection = InputSimulation.getSimulationCollection(
        simulationDataFrame)

    if False:
        fig1 = Figure("/home/aholaj/Nextcloud/kuvatesti", "Prognostic")

        cloudTicks = Plot.getTicks(0, 1000, 250)

        logaritmicLevels = Plot.getLogaritmicTicks(-17, -9, includeFives=True)

        ax, im = Plot.getTimeseriesOfProfile(
            fig1.getAxes(),
            simulationCollection["Prognostic_48h"],
            "P_cDUa",
            title="",
            yticks=cloudTicks,
            timeEndH=33.05,
            levels=logaritmicLevels,
            useColorBar=False,
            showXaxisLabels=False,
            showXLabel=False)

        fig1.save()
    if False:
        # create figure object
        fig2 = Figure("/home/aholaj/Nextcloud/kuvatesti", "LWP")
        # load ts-datasets and change their time coordinates to hours
        for k in [
                "Prognostic_48h", "ICE4_24h", "Prognostic_2",
                "Prognostic_Aero", "Prognostic_2_Aero"
        ]:
            simulationCollection[k].getTSDataset()
            simulationCollection[k].setTimeCoordToHours()

        # plot timeseries with unit conversion
        Plot.getTimeseries(fig2.getAxes(), [
            simulationCollection["Prognostic_48h"],
            simulationCollection["ICE4_24h"],
            simulationCollection["Prognostic_Aero"],
            simulationCollection["Prognostic_2"],
            simulationCollection["Prognostic_2_Aero"]
        ],
                           "lwp_bar",
                           conversionFactor=1000.)
        end = 32
        # set xticks
        ticks = PlotTweak.setXticks(fig2.getAxes(), end=end, interval=0.5)
        # set xlabels
        shownLabelsBoolean = PlotTweak.setXLabels(fig2.getAxes(),
                                                  ticks,
                                                  end=end,
                                                  interval=4)
        # set xtick sizes
        PlotTweak.setXTickSizes(fig2.getAxes(),
                                shownLabelsBoolean,
                                minorFontSize=8)
        # limit x-axes
        PlotTweak.setXLim(fig2.getAxes(), end=end)
        PlotTweak.setYLim(fig2.getAxes(), end=60)
        # set annotation for figure
        PlotTweak.setAnnotation(fig2.getAxes(),
                                "a) Liquid water path",
                                xPosition=2,
                                yPosition=30)

        Plot.getVerticalLine(fig2.getAxes(), 2)
        # set axes labels
        PlotTweak.setXaxisLabel(fig2.getAxes(), "LWP", "g\ m^{-2}")
        PlotTweak.setYaxisLabel(fig2.getAxes(), "Time", "h")
        PlotTweak.useLegend(fig2.getAxes())
        PlotTweak.setTightLayot(fig2.getFig())

        fig2.save()

    if True:
        # create figure object
        fig2 = Figure("/home/aholaj/Nextcloud/kuvatesti", "Nc_ic")
        # load ts-datasets and change their time coordinates to hours
        sensitive = [
            "ICE0_8h", "ICE1_24h", "ICE2_24h", "ICE3_24h", "ICE3_8h",
            "ICE4_24h", "ICE5_8h", "ICE6_8h", "Prognostic_48h"
        ]
        for k in sensitive:
            simulationCollection[k].getTSDataset()
            simulationCollection[k].setTimeCoordToHours()

            # plot timeseries with unit conversion
            Plot.getTimeseries(fig2.getAxes(),
                               simulationCollection[k],
                               "Nc_ic",
                               conversionFactor=1e-6)
        end = 32
        # set xticks
        ticks = PlotTweak.setXticks(fig2.getAxes(), end=end, interval=0.5)
        # set xlabels
        shownLabelsBoolean = PlotTweak.setXLabels(fig2.getAxes(),
                                                  ticks,
                                                  end=end,
                                                  interval=4)
        # set xtick sizes
        PlotTweak.setXTickSizes(fig2.getAxes(),
                                shownLabelsBoolean,
                                minorFontSize=8)
        # limit x-axes
        PlotTweak.setXLim(fig2.getAxes(), end=end)
        #PlotTweak.setYLim(fig2.getAxes(), end = 60)
        # set annotation for figure
        PlotTweak.setAnnotation(fig2.getAxes(),
                                "a) Nc_ic",
                                xPosition=2,
                                yPosition=155)

        Plot.getVerticalLine(fig2.getAxes(), 2)
        # set axes labels
        PlotTweak.setYaxisLabel(fig2.getAxes(), "In-cloud\ CDNC", "mg^{-1}")
        PlotTweak.setXaxisLabel(fig2.getAxes(), "Time", "h")
        PlotTweak.useLegend(fig2.getAxes())
        PlotTweak.setTightLayot(fig2.getFig())

        fig2.save(file_extension=".png")
    if True:
        # create figure object
        fig3 = Figure("/home/aholaj/Nextcloud/kuvatesti", "IWP")
        # load ts-datasets and change their time coordinates to hours
        for k in [
                "Prognostic_48h", "ICE4_24h", "Prognostic_2",
                "Prognostic_Aero", "Prognostic_2_Aero"
        ]:
            simulationCollection[k].getTSDataset()
            #simulationCollection[k].setTimeCoordToHours()

        # plot timeseries with unit conversion
        Plot.getTimeseries(fig3.getAxes(), [
            simulationCollection["Prognostic_48h"],
            simulationCollection["ICE4_24h"],
            simulationCollection["Prognostic_Aero"],
            simulationCollection["Prognostic_2"],
            simulationCollection["Prognostic_2_Aero"]
        ],
                           "iwp_bar",
                           conversionFactor=1000.)
        end = 32
        # set xticks
        ticks = PlotTweak.setXticks(fig3.getAxes(), end=end, interval=0.5)
        # set xlabels
        shownLabelsBoolean = PlotTweak.setXLabels(fig3.getAxes(),
                                                  ticks,
                                                  end=end,
                                                  interval=4)
        # set xtick sizes
        PlotTweak.setXTickSizes(fig3.getAxes(),
                                shownLabelsBoolean,
                                minorFontSize=8)
        # limit x-axes
        PlotTweak.setXLim(fig3.getAxes(), end=end)
        PlotTweak.setYLim(fig3.getAxes(), end=60)
        # set annotation for figure
        PlotTweak.setAnnotation(fig3.getAxes(),
                                "b) Ice water path",
                                xPosition=2,
                                yPosition=30)

        Plot.getVerticalLine(fig3.getAxes(), 2)
        # set axes labels
        PlotTweak.setXaxisLabel(fig3.getAxes(), "IWP", "g\ m^{-2}")
        PlotTweak.setYaxisLabel(fig3.getAxes(), "Time", "h")
        PlotTweak.useLegend(fig3.getAxes())
        PlotTweak.setTightLayot(fig3.getFig())

        fig3.save()

    if False:
        # create figure object
        fig2 = Figure("/home/aholaj/Nextcloud/kuvatesti",
                      "fourWinds",
                      ncols=2,
                      nrows=2,
                      style="seaborn-paper")
        # load ts-datasets and change their time coordinates to hours
        for k in ["ICE0_8h", "ICE1_8h"]:
            simulationCollection[k].getTSDataset()
            simulationCollection[k].getPSDataset()
            simulationCollection[k].setTimeCoordToHours()

        # plot timeseries with unit conversion
        Plot.getTimeseries(fig2.getAxes()[0, 0],
                           simulationCollection["ICE0_8h"],
                           "lwp_bar",
                           conversionFactor=1000.)
        Plot.getVerticalLine(fig2.getAxes()[0, 0], 2)

        if True:
            PlotTweak.setSuperWrapper(
                fig2.getAxes()[0, 0],
                xstart=0,
                xend=8,
                xtickinterval=0.5,
                xlabelinterval=2,
                xticks=None,
                xShownLabels=None,
                xTickMajorFontSize=
                3.5,  # matplotlib.rcParams["xtick.major.size"],
                yTickMajorFontSize=
                3.5,  #matplotlib.rcParams["ytick.major.size"],
                ystart=0,
                yend=60,
                ytickinterval=2,
                ylabelinterval=10,
                yticks=None,
                yShownLabels=None,
                annotationText=None,
                annotationXPosition=2,
                annotationYPosition=30,
                xlabel="Time",
                xunit="h",
                ylabel="LWP",
                yunit="g\ m^{-2}",
                useBold=True)
        PlotTweak.hideYTickLabels(fig2.getAxes()[0, 0])

        PlotTweak.setAxesOff(fig2.getAxes()[0, 1])
        PlotTweak.setLegendSimulation(
            fig2.getAxes()[0, 1],
            [simulationCollection["ICE0_8h"], simulationCollection["ICE1_8h"]])

        ax, im, levels = Plot.getTimeseriesOfProfile(
            fig2.getAxes()[1, 1],
            simulationCollection["ICE0_8h"],
            "P_RH",
            levels=None,
            useLogaritmic=False,
            colors=None)
        PlotTweak.setAxesOff(fig2.getAxes()[1, 0])
        cax = matplotlib.pyplot.axes([0.05, 0.25, 0.3, 0.03])
        Plot.getColorBar(im, cax, levels)

        #Plot.getContourLine(fig2.getAxes()[1,1],"ICE0_8h", color =  'black' , value = 100)

        fig2.save()
Пример #4
0
    def figure4(self):

        fig = Figure(self.figurefolder,"figure4", ncols = 2, nrows = 3, left=0.15, wspace=0.4)

        simulationList = ["Prognostic_48h", "ICE4_24h"]

        for k in simulationList:
            self.simulationCollection[k].getTSDataset()
            self.simulationCollection[k].getNCDataset()
            self.simulationCollection[k].setTimeCoordToHours()

        lwpYlimit = 60
        iwpYlimit = 21

        xPosition = 0.52
        yPositionFrac = 0.91

        # figA
        ax = fig.getAxes(0)
        for k in simulationList:
            Plot.getTimeseries(ax,
                           self.simulationCollection[k],
                           "lwp_bar", conversionFactor=1000.)
        end = lwpYlimit
        PlotTweak.setAnnotation(ax, "a) Liquid water path", xPosition=xPosition, yPosition= yPositionFrac*end)
        PlotTweak.setYaxisLabel(ax,"LWP", "g\ m^{-2}")
        PlotTweak.setYLim(ax, end = end)
        PlotTweak.setYLim(ax, end = end)
        ticks = PlotTweak.setYticks(ax, end = end, interval = 2)
        shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 10)
        PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        # figB
        ax = fig.getAxes(1)
        for k in simulationList:
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "iwp_bar", conversionFactor=1000.)
        end = iwpYlimit
        PlotTweak.setAnnotation(ax, "b) Ice water path", xPosition=xPosition, yPosition= yPositionFrac*end)
        PlotTweak.setYaxisLabel(ax,"IWP", "g\ m^{-2}")
        PlotTweak.setYLim(ax, end = end)
        end = iwpYlimit
        PlotTweak.setYLim(ax, end = end)
        ticks = PlotTweak.setYticks(ax, end = end, interval = 1)
        shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 3)
        PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        # figC
        ax = fig.getAxes(2)
        for k in simulationList:
            self.simulationCollection[k].getNCDataset()["Ni_ii_vol"].plot(ax = ax,
                                                                     color = self.simulationCollection[k].getColor(),
                                                                     label =  self.simulationCollection[k].getLabel(),
                                                                     linewidth = self.simulationCollection[k].getLineWidth())
        end = 5
        PlotTweak.setAnnotation(ax, "c) Ice number \nconcentration", xPosition=xPosition, yPosition= 4)
        PlotTweak.setYaxisLabel(ax,"N_{i}", "L^{-1}")
        PlotTweak.setYLim(ax, end = end)
        ticks = PlotTweak.setYticks(ax, end = end, interval = 0.2, integer=False)

        shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 1)
        PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        # figD
        ax = fig.getAxes(3)
        for k in simulationList:
            Plot.getTimeseries(ax,
                               self.simulationCollection[k],
                               "Nc_ic", conversionFactor=1e-6)
        end = 170
        PlotTweak.setAnnotation(ax, "d) In-cloud CDNC", xPosition=xPosition, yPosition= yPositionFrac*end)
        PlotTweak.setYaxisLabel(ax,"CDNC", "mg^{-1}")
        PlotTweak.setYLim(ax, end = end)
        ticks = PlotTweak.setYticks(ax, end = end, interval = 10)
        shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 50)
        PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        # figE
        ax = fig.getAxes(4)
        for k in simulationList:
            for muuttuja in ["zb", "zc"]:
                self.simulationCollection[k].getTSDataset()[muuttuja].where(self.simulationCollection[k].getTSDataset()[muuttuja] > 0).plot(ax = ax,
                                                                     color = self.simulationCollection[k].getColor(),
                                                                     label =  self.simulationCollection[k].getLabel(),
                                                                     linewidth = self.simulationCollection[k].getLineWidth())
        end = 1000
        PlotTweak.setAnnotation(ax, "e) Cloud top and base", xPosition=xPosition, yPosition= yPositionFrac*end)
        PlotTweak.setYaxisLabel(ax,"Height", "m")
        PlotTweak.setYLim(ax, end = end)
        ticks = PlotTweak.setYticks(ax, end = end, interval = 100)
        shownLabelsBoolean = PlotTweak.setYLabels(ax, ticks, end = end, interval = 200)
        PlotTweak.setYTickSizes(ax, shownLabelsBoolean)

        for i in range(5):
            ax = fig.getAxes(i)
            end = 32
            PlotTweak.setXLim(ax, end = end)
            Plot.getVerticalLine(ax, 2)
            Plot.getVerticalLine(ax, 24)

            if i in [3,4]:
                PlotTweak.setXaxisLabel(ax,"Time", "h")
            else:
                PlotTweak.setXaxisLabel(ax,"")
                PlotTweak.hideXTickLabels(ax)

            ticks = PlotTweak.setXticks(ax, end = end, interval = 0.5)
            shownLabelsBoolean = PlotTweak.setXLabels(ax, ticks, end = end, interval = 4)
            PlotTweak.setXTickSizes(ax, shownLabelsBoolean)

        # empty space
        ax = fig.getAxes(5)
        ax.axis("off")
        legend_elements = [Patch(facecolor=self.simulationCollection["Prognostic_48h"].getColor(),
                             label='Prognostic ice'),
                       Patch(facecolor=self.simulationCollection["ICE4_24h"].getColor(),
                             label='ICE4')]

        ax.legend(handles=legend_elements, loc='center', frameon = True, framealpha = 1.0)

        fig.save()