示例#1
0
    def constructImage(self):
        plot = Plot()

        # Uneven error bars
        line = Line()
        line.xValues = [6,10,4,0,8,2,12]
        line.yValues = [50,90,30,10,70,20,110]
        line.yMins   = [y - 30 for y in line.yValues]
        line.yMaxes  = [y + 50 for y in line.yValues]
        line.label = "Asymmetric Errors"
        line.color = "red"

        # Even error bars
        line2 = Line()
        line2.xValues = [1,5,3,9,7,11]
        line2.yValues = [100, 120, 110, 140, 130, 150]
        line2.color = "blue"
        line2.label = "Symmetric Errors"
        line2.yErrors = [5,25,15,45,35,55]

        plot.add(line)
        plot.add(line2)
        plot.setXLabel("X Label")
        plot.setYLabel("Y Label")
        plot.hasLegend()
        plot.setXLimits(-1, 13)
        plot.save(self.imageName)
示例#2
0
def getBinBars(rows,
               binKey,
               quantityKey,
               xLabelFormattingFunction,
               xLabel,
               yLabel,
               xLabelRotation=0):
    bins = []
    countsPerBin = []

    for row in rows:
        bins.append(int(row[binKey]))
        countsPerBin.append(int(row[quantityKey]))

    bar = Bar()
    bar.xValues = bins
    bar.yValues = countsPerBin

    if xLabelFormattingFunction is not None:
        bar.xTickLabelPoints = range(len(bins))
        bar.xTickLabels = map(xLabelFormattingFunction, bar.xTickLabelPoints)

    if xLabelRotation > 0:
        bar.setXTickLabelProperties(rotation=str(xLabelRotation))

    barPlot = Plot()
    barPlot.add(bar)
    barPlot.setXLabel(xLabel)
    barPlot.setYLabel(yLabel)
    #    barPlot.setXLimits(0, None)
    return barPlot
def create_plot_objects_for_group(phase_name, group_name, min_timestamp,
                                  max_timestamp, make_legend):
    """
    Create and format two Boomslang plot objects: one for the time series plot,
    and the other for a CDF of the y-axis values in the time series. min and
    max timestamps are assumed to be adjusted with timestamp_adjuster (see
    below) before being passed as arguments
    """

    time_series_plot = Plot()
    time_series_plot.setXLimits(
        0, (max_timestamp - min_timestamp) / 1000000.0)
    time_series_plot.setXLabel("Time (s)")
    time_series_plot.setYLabel(group_name)
    cdf_plot = Plot()
    cdf_plot.setXLabel(group_name)
    cdf_plot.setYLabel("CDF")

    for plot in [time_series_plot, cdf_plot]:
        if make_legend:
            plot.hasLegend(labelSize = 8, columns=2)

        plot.setTitle("Phase: %(phase_name)s, %(group_name)s" %
                      {"phase_name" : phase_name, "group_name" : group_name})

        for color in ["red", "green", "blue", "teal", "orange", "purple",
                      "brown", "black"]:
            plot.addLineColor(color)

        for style in ["solid", "dashed", "dotted"]:
            plot.addLineStyle(style)

    return (time_series_plot, cdf_plot)
示例#4
0
    def constructImage(self):
        plot = Plot()

        bar = Bar()
        bar.xValues = range(5)
        bar.yValues = [2, 8, 4, 6, 5]

        plot.add(bar)
        plot.setXLabel("Widget ID")
        plot.setYLabel("# Widgets Sold")

        plot.save(self.imageName)
示例#5
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.yValues = [25, 40, 30, 23, 10, 50]
        line.xValues = range(len(line.yValues))

        plot.add(line)
        plot.setXLabel("X Label")
        plot.setYLabel("Y Label")
        plot.setYLimits(0, 60)

        plot.save(self.imageName)
示例#6
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.yValues = [25, 40, 30, 23, 10, 50]
        line.xValues = range(len(line.yValues))
        line.xTickLabels = ["X 1", "X 2", "X 3", "X 4", "X 5"]
        line.yTickLabels = ["Y Ten", "Y Twenty", "Y Thirty", "Y Forty",
                            "Y Fifty", "Y Sixty"]
        line.yTickLabelPoints = [10, 20, 30, 40, 50, 60]

        # You can set tick label properties with a dictionary ...

        line.xTickLabelProperties = {
            "color" : "blue",
            "weight" : "bold",
            "rotation" : 45
            }

        line.yTickLabelProperties = {
            "style" : "italic",
            "alpha" : 0.5,
            "color" : "red"
            }

        # (clearing for demonstrative purposes)
        line.xTickLabelProperties.clear()
        line.yTickLabelProperties.clear()

        # You can also set by direct elementwise access

        line.xTickLabelProperties["color"] = "blue"
        line.xTickLabelProperties["weight"] = "bold"
        line.xTickLabelProperties["rotation"] = "45"

        line.yTickLabelProperties["style"] = "italic"
        line.yTickLabelProperties["alpha"] = 0.5
        line.yTickLabelProperties["color"] = "red"

        plot.add(line)
        plot.setTitle("Craaazy Title")
        plot.setTitleProperties(style="italic", weight="bold", rotation="5",
                                color="orange")
        plot.setXLabel("X Label")
        plot.setYLabel("Y Label")
        plot.setYLimits(0, 60)

        plot.setPlotParameters(bottom=.15, left=0.15)

        plot.save(self.imageName)
    def constructImage(self):
        cluster = ClusteredBars()

        colors = ['red','green','blue','CornflowerBlue','LightSalmon']

        yVals = [[
            [1, 3, 2, 5, 4],
            [2, 2, 2, 2, 2],
            [1, 3, 2, 4, 3],
            [0, 4, 0, 4, 0],
            [5, 5, 5, 5, 5]
        ],[
            [2, 2, 2, 2, 2],
            [2, 2, 2, 2, 2],
            [2, 2, 2, 2, 2],
            [2, 2, 2, 2, 2],
            [2, 2, 2, 2, 2]
        ],
        [
            [1, 3, 1, 3, 1],
            [1, 3, 1, 3, 1],
            [1, 3, 1, 3, 1],
            [1, 3, 1, 3, 1],
            [1, 3, 1, 3, 1],
        ]]

        for i in xrange(3):
            stack = StackedBars()

            for j in xrange(5):
                bar = Bar()
                bar.xValues = range(5)
                bar.yValues = yVals[i][j]
                bar.color = colors[j]
                bar.label = "Subject %d" % (j+1,)

                stack.add(bar)
            cluster.add(stack)

        cluster.spacing = 0.5
        cluster.xTickLabels = ["1", "2", "3", "4", "5"]

        plot = Plot()
        plot.add(cluster)
        plot.hasLegend()
        plot.setXLabel('Nested Cars')
        plot.setYLabel('Party (lampshades)')
        plot.save(self.imageName)
示例#8
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.yValues = [25, 40, 30, 23, 10, 50]
        line.xValues = range(len(line.yValues))

        plot.add(line)
        plot.setXLabel("X Label")
        plot.setYLabel("Y Label")
        plot.setYLimits(0, 60)

        plot.grid.color = "#ff0000"
        plot.grid.style = "dotted"
        plot.grid.visible = True

        plot.save(self.imageName)
示例#9
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.xValues = xrange(100)
        line.xTickLabels = ["Whoa this label is really long why is this label so long"]
        line.xTickLabelPoints = [42]
        line.xTickLabelProperties["rotation"] = 45
        line.yValues = [math.sin(x) for x in xrange(100)]
        line.yTickLabels = ["Look at this value. Pretty sweet value right?"]
        line.yTickLabelPoints = [0.3]

        plot.add(line)
        plot.setXLabel("Value")
        plot.setYLabel("sin(Value)")

        plot.save(self.imageName)
示例#10
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.xValues = xrange(100)
        line.xTickLabels = [
            "Whoa this label is really long why is this label so long"
        ]
        line.xTickLabelPoints = [42]
        line.xTickLabelProperties["rotation"] = 45
        line.yValues = [math.sin(x) for x in xrange(100)]
        line.yTickLabels = ["Look at this value. Pretty sweet value right?"]
        line.yTickLabelPoints = [0.3]

        plot.add(line)
        plot.setXLabel("Value")
        plot.setYLabel("sin(Value)")

        plot.save(self.imageName)
示例#11
0
    def constructImage(self):
        plot = Plot()

        line = Line()
        line.yValues = [25, 40, 30, 23, 10, 50]
        line.xValues = range(len(line.yValues))

        plot.add(line)
        plot.setXLabel("X Label")
        plot.setYLabel("Y Label")
        plot.setYLimits(0, 60)

        plot.setXTickLabelSize(24)
        plot.setYTickLabelSize(36)
        plot.setAxesLabelSize(18)

        plot.setPlotParameters(bottom=0.14)

        plot.save(self.imageName)
示例#12
0
    def constructImage(self):
        line = Line()
        line.xValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
        line.yValues = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

        plot = Plot()
        plot.useLatexLabels()
        plot.setXLabel(r"$x$")
        plot.setYLabel(r"$f(x) = x^2$")
        plot.setTitle(r"LaTeX is Number $\sum_{n=1}^{\infty}\frac{-e^{i\pi}}{2^n}$")
        plot.add(line)

        layout = PlotLayout()
        layout.useLatexLabels()
        layout.addPlot(plot)

        layout.setAxesLabelSize(18)
        layout.setPlotParameters(top=0.84)
        layout.save(self.imageName)
示例#13
0
    def constructImage(self):
        line = Line()
        line.xValues = numpy.arange(0, 150, 0.01)
        line.yValues = numpy.cos(.02 * numpy.pi * line.xValues)

        plot = Plot()
        plot.add(line)
        plot.setXLimits(0, 150)
        plot.setYLimits(-1, 1)
        plot.setXLabel("X")
        plot.setYLabel("cos(X)")
        splitPlots = plot.split(2)

        layout = PlotLayout()
        layout.width = 2
        layout.addPlot(plot, grouping="unsplit")

        for s in splitPlots:
            layout.addPlot(s, grouping="splits")

        layout.save(self.imageName)
    def constructImage(self):
        cluster = ClusteredBars()

        colors = ['red', 'green', 'blue', 'CornflowerBlue', 'LightSalmon']

        yVals = [[[1, 3, 2, 5, 4], [2, 2, 2, 2, 2], [1, 3, 2, 4, 3],
                  [0, 4, 0, 4, 0], [5, 5, 5, 5, 5]],
                 [[2, 2, 2, 2, 2], [2, 2, 2, 2, 2], [2, 2, 2, 2, 2],
                  [2, 2, 2, 2, 2], [2, 2, 2, 2, 2]],
                 [
                     [1, 3, 1, 3, 1],
                     [1, 3, 1, 3, 1],
                     [1, 3, 1, 3, 1],
                     [1, 3, 1, 3, 1],
                     [1, 3, 1, 3, 1],
                 ]]

        for i in xrange(3):
            stack = StackedBars()

            for j in xrange(5):
                bar = Bar()
                bar.xValues = range(5)
                bar.yValues = yVals[i][j]
                bar.color = colors[j]
                bar.label = "Subject %d" % (j + 1, )

                stack.add(bar)
            cluster.add(stack)

        cluster.spacing = 0.5
        cluster.xTickLabels = ["1", "2", "3", "4", "5"]

        plot = Plot()
        plot.add(cluster)
        plot.hasLegend()
        plot.setXLabel('Nested Cars')
        plot.setYLabel('Party (lampshades)')
        plot.save(self.imageName)
示例#15
0
def create_plot_objects_for_group(phase_name, group_name, min_timestamp,
                                  max_timestamp, make_legend):
    """
    Create and format two Boomslang plot objects: one for the time series plot,
    and the other for a CDF of the y-axis values in the time series. min and
    max timestamps are assumed to be adjusted with timestamp_adjuster (see
    below) before being passed as arguments
    """

    time_series_plot = Plot()
    time_series_plot.setXLimits(0, (max_timestamp - min_timestamp) / 1000000.0)
    time_series_plot.setXLabel("Time (s)")
    time_series_plot.setYLabel(group_name)
    cdf_plot = Plot()
    cdf_plot.setXLabel(group_name)
    cdf_plot.setYLabel("CDF")

    for plot in [time_series_plot, cdf_plot]:
        if make_legend:
            plot.hasLegend(labelSize=8, columns=2)

        plot.setTitle("Phase: %(phase_name)s, %(group_name)s" % {
            "phase_name": phase_name,
            "group_name": group_name
        })

        for color in [
                "red", "green", "blue", "teal", "orange", "purple", "brown",
                "black"
        ]:
            plot.addLineColor(color)

        for style in ["solid", "dashed", "dotted"]:
            plot.addLineStyle(style)

    return (time_series_plot, cdf_plot)
示例#16
0
    def constructImage(self):
        line1 = Line()
        line1.xValues = range(7)
        line1.yValues = [1, 2, 4, 8, 16, 32, 64]
        line1.label = "First Plot"
        line1.lineStyle = "-"
        line1.color = "red"

        line2 = Line()
        line2.xValues = range(7)
        line2.yValues = [100, 90, 80, 70, 60, 50, 40]
        line2.label = "Second Plot"
        line2.lineStyle = "--"
        line2.color = "blue"

        plot = Plot()
        plot.add(line1)
        plot.add(line2)
        plot.setXLabel("Shared X Axis")
        plot.setYLabel("First Plot's Y Axis")
        plot.setTwinX("Second Plot's Y Axis", 1)
        plot.hasLegend()

        plot.save(self.imageName)
示例#17
0
    def constructImage(self):
        line = Line()
        line.xValues = range(5)
        line.yValues = [2, 4, 6, 8, 10]

        linePlot = Plot()
        linePlot.add(line)
        linePlot.setXLabel("X Data")
        linePlot.setYLabel("Y Data")
        linePlot.setTitle("Data as Line")

        bar = Bar()
        bar.xValues = range(5)
        bar.yValues = [2, 4, 6, 8, 10]

        barPlot = Plot()

        barPlot.add(bar)
        barPlot.setXLabel("X Data")
        barPlot.setYLabel("Y Data")
        barPlot.setTitle("Data as Bars")

        scatter = Scatter()
        scatter.xValues = range(5)
        scatter.yValues = [2, 4, 6, 8, 10]

        scatterPlot = Plot()
        scatterPlot.add(scatter)
        scatterPlot.setXLabel("X Data")
        scatterPlot.setYLabel("Y Data")
        scatterPlot.setTitle("Data as Points")


        layout = PlotLayout()
        # Plots in the same grouping are placed together on the same line
        layout.addPlot(linePlot, grouping="topRow")
        layout.addPlot(barPlot, grouping="topRow")

        # Plots without a grouping are arranged as follows:

        # * While you can make a row of N plots, where N is the size of the plot
        # grouping with the largest size, do so.

        # * If you can't make a row of N plots, make the plots stretch across a
        # single row.

        layout.addPlot(scatterPlot)

        # Set values similar to those given in the "Configure subplots" sliders
        # in the interactive figure
        layout.setPlotParameters(hspace=0.48)
        layout.save(self.imageName)
示例#18
0
def plotExperiments(script_arguments_file):
    script_arguments_fp = open(script_arguments_file, "r")
    script_arguments = json.load(script_arguments_fp)
    script_arguments_fp.close()

    disk = script_arguments["disk"]

    sort_strategies = script_arguments["sort_strategies"]
    max_key_lengths = map(int, script_arguments["max_key_lengths"])
    max_value_lengths = map(int, script_arguments["max_value_lengths"])
    pareto_as = map(float, script_arguments["pareto_as"])
    pareto_bs = map(int, script_arguments["pareto_bs"])
    byte_counts = map(int, script_arguments["byte_counts"])
    timeout = script_arguments["timeout"]

    experiments = [(sort_strategy, max_key_length, max_value_length, pareto_a,
                    pareto_b, byte_count) for sort_strategy in sort_strategies
                   for max_key_length in max_key_lengths
                   for max_value_length in max_value_lengths
                   for pareto_a in pareto_as for pareto_b in pareto_bs
                   for byte_count in byte_counts]

    # Open each file and store information about the experiment
    file_id = 0
    experiment_outcomes = {}
    for experiment in experiments:
        filename = os.path.join(disk, "stats_%d.json" % file_id)
        sort_time = None
        scratch_size = None
        if os.path.exists(filename):
            fp = open(filename, "r")
            try:
                stats_json = json.load(fp)
                # time might not be present if the run timed out
                if "time" in stats_json:
                    # sort time in seconds
                    sort_time = stats_json["time"] / 1000000.0
                # scratch size in megabytes
                scratch_size = stats_json["scratch_size"] / 1000000.0
            except ValueError:
                # If the JSON somehow doesn't parse, just skip this file
                pass
        experiment_outcomes[experiment] = (sort_time, scratch_size)
        file_id += 1

    # Specify colors manually so we can sync up a line to its scatter
    colors = ["red", "green", "blue", "teal", "orange"]
    if len(sort_strategies) > len(colors):
        print >> sys.stderr, "Only %d colors but %d lines" % (
            len(colors), len(sort_strategies))
        sys.exit(1)

    # Plot sort time vs scratch size
    plot = Plot()
    plot.setXLabel("Scratch Size (MB)")
    plot.setYLabel("Sort Time (s)")
    plot.hasLegend(labelSize=8, columns=3)
    plot.setTitle("Sort Time vs Scratch Size")

    lines = {}
    for (sort_strategy, color) in zip(sort_strategies, colors):
        line = LineAndScatter(sort_strategy, color)
        lines[sort_strategy] = line

    for experiment, (sort_time, scratch_size) in \
            experiment_outcomes.iteritems():
        # Mark this experiment on the line corresponding to its sort strategy
        line = lines[experiment[0]]
        if scratch_size is not None:
            line.add_point(scratch_size, sort_time)

    map(lambda l: l.add_to_plot(plot), lines.values())

    layout = PlotLayout()
    layout.addPlot(plot)
    output_file = os.path.join(disk, "SortTimeVsScratchSize.pdf")
    layout.save(output_file)

    # Plot Sort time vs Scratch Size of a particular strategy:
    # First sort the experiments by sort strategy
    strategy_outcomes = {}
    for experiment in experiments:
        sort_strategy = experiment[0]
        parameters = experiment[1:]
        if parameters not in strategy_outcomes:
            strategy_outcomes[parameters] = {}
        strategy_outcomes[parameters][sort_strategy] = \
            experiment_outcomes[experiment]

    # Create one plot per strategy, with that strategy's scratch size
    # on the x-axis
    layout = PlotLayout()
    for major_sort_strategy in sort_strategies:
        # Set up plot boilerplate
        plot = Plot()
        plot.setXLabel("Scratch Size of %s (MB)" % (major_sort_strategy))
        plot.setYLabel("Sort Time (s)")
        plot.hasLegend(labelSize=8, columns=3)
        plot.setTitle("Sort Time vs Scratch Size of %s" %
                      (major_sort_strategy))

        lines = {}
        for (sort_strategy, color) in zip(sort_strategies, colors):
            line = LineAndScatter(sort_strategy, color)
            lines[sort_strategy] = line
        # For each configuration, plot the sort times on the y axis, and the
        # scratch time for the major_sort_strategy on the x-axis
        for outcome_by_strategy in strategy_outcomes.values():
            scratch_size = outcome_by_strategy[major_sort_strategy][1]
            if scratch_size is not None:
                # Plot the sort time of each strategy using this scratch
                # As the x-axis value.
                for sort_strategy in sort_strategies:
                    sort_time = outcome_by_strategy[sort_strategy][0]
                    lines[sort_strategy].add_point(scratch_size, sort_time)

        map(lambda l: l.add_to_plot(plot), lines.values())

        layout.addPlot(plot)
    output_file = os.path.join(disk, "SortTimeVsScratchSizeByStrategy.pdf")
    layout.save(output_file)

    # Plot individual parameter graphs using median parameters
    median_max_key_length = median(max_key_lengths)
    median_max_value_length = median(max_value_lengths)
    median_pareto_a = median(pareto_as)
    median_pareto_b = median(pareto_bs)
    median_byte_count = median(byte_counts)

    for (parameter_name, x_label, parameter_values, fixed_parameters) in [
        ("MaxKeyLength", "Max Key Length (bytes)", max_key_lengths,
         (None, median_max_value_length, median_pareto_a, median_pareto_b,
          median_byte_count)),
        ("MaxValueLength", "Max Value Length (bytes)", max_value_lengths,
         (median_max_key_length, None, median_pareto_a, median_pareto_b,
          median_byte_count)),
        ("ParetoA", "Pareto A", pareto_as,
         (median_max_key_length, median_max_value_length, None,
          median_pareto_b, median_byte_count)),
        ("ParetoB", "Pareto B (bytes)", pareto_bs,
         (median_max_key_length, median_max_value_length, median_pareto_a,
          None, median_byte_count)),
        ("FileSize", "File Size (bytes)", byte_counts,
         (median_max_key_length, median_max_value_length, median_pareto_a,
          median_pareto_b, None))
    ]:

        time_plot = Plot()
        size_plot = Plot()
        for (plot, label, unit) in [(time_plot, "Sort Time", "s"),
                                    (size_plot, "Scratch Size", "MB")]:
            plot.setXLabel(x_label)
            plot.setYLabel("%s (%s)" % (label, unit))
            plot.hasLegend(labelSize=8, columns=3)
            plot.setTitle("%s vs %s" % (label, parameter_name))

        for (sort_strategy, color) in zip(sort_strategies, colors):
            # Each sort strategy has its own line on each of the two plots
            time_line = LineAndScatter(sort_strategy, color)
            size_line = LineAndScatter(sort_strategy, color)

            # Compute the set of parameters corresponding to this experiment.
            for parameter in parameter_values:
                # Apply this parameter to the None value in the tuple of
                # fixed parameters.
                parameters = [sort_strategy]
                for fixed_parameter in fixed_parameters:
                    if fixed_parameter is None:
                        parameters.append(parameter)
                    else:
                        parameters.append(fixed_parameter)

                # Plot sort time and scratch size for this experiment
                (sort_time,
                 scratch_size) = experiment_outcomes[tuple(parameters)]

                time_line.add_point(parameter, sort_time)
                size_line.add_point(parameter, scratch_size)

            # Add lines to plots
            time_line.add_to_plot(time_plot)
            size_line.add_to_plot(size_plot)

        # Save the plot as a pdf
        layout = PlotLayout()
        layout.addPlot(time_plot)
        layout.addPlot(size_plot)
        output_file = os.path.join(disk, "%s.pdf" % (parameter_name))
        layout.save(output_file)
示例#19
0
from boomslang import Line, Plot

plot = Plot()

# Uneven error bars
line = Line()
line.xValues = range(6)
line.yValues = [25, 21, 30, 23, 10, 30]
line.yMins = [10, 18, 10, 10, 5, 20]
line.yMaxes = [30, 50, 40, 30, 20, 45]
line.label = "Asymmetric Errors"
line.color = "red"

line.xValues = range(len(line.yValues))

# Even error bars
line2 = Line()
line2.xValues = range(6)
line2.yValues = [35, 40, 45, 40, 55, 50]
line2.color = "blue"
line2.label = "Symmetric Errors"
line2.yErrors = [3, 6, 5, 3, 5, 4]

plot.add(line)
plot.add(line2)
plot.setXLabel("X Label")
plot.setYLabel("Y Label")
plot.hasLegend()
plot.save("errorbars.png")
def plot_timeline_for_phase(log_directory, job, phase, phase_data):
    min_timestamp = phase_data["min_timestamp"]
    max_timestamp = phase_data["max_timestamp"]

    description = Description(os.path.join(log_directory, job, "description"))
    stage_ordering = description.getStageOrdering(phase)

    duration_lists = {}

    for stage in stage_ordering:
        duration_lists[stage] = []

    for key in phase_data:
        if key in ["min_timestamp", "max_timestamp"]:
            continue

        hostname, stage, worker_id = key

        worker_duration_info = Duration(
            hostname.split('.')[0], stage, worker_id,
            (phase_data[key][0] - min_timestamp) / 1000000.0,
            (phase_data[key][1] - min_timestamp) / 1000000.0)

        duration_lists[stage].append(worker_duration_info)

    def sort_function(x):
        return (x.hostname, x.worker_id, x.start_time, x.stop_time)

    layout = PlotLayout()

    for stage in stage_ordering:
        duration_list = duration_lists[stage]

        duration_list.sort(key=sort_function)

        bars = {}

        # Set up a "padding" bar that will appear to move bars up so that they
        # start when the worker starts
        start_bar = Bar()
        start_bar.linewidth = 0
        start_bar.color = "white"

        for i, duration in enumerate(duration_list):
            if duration.hostname not in bars:
                bars[duration.hostname] = Bar()

            bars[duration.hostname].yValues.append(
                duration.stop_time - duration.start_time)
            start_bar.yValues.append(duration.start_time)

        # Make sure that all bars have the same number of y-axis values,
        # give them x-axis values and set their colors

        start_bar.xValues = range(len(start_bar.yValues))
        start_bar.xTickLabelProperties = {
            "rotation" : 90
            }

        bar_colors = ["red", "blue", "green", "orange", "gray", "pink",
                      "purple", "black"]

        offset = 0

        for i, (hostname, bar) in enumerate(bars.items()):
            # Pad y axis with zeroes so that bars can be laid out next to
            # each other with a StackedBars
            num_y_values = len(bar.yValues)

            bar.yValues = (([0] * offset) + bar.yValues +
                           ([0] *
                            (len(duration_list) - (num_y_values + offset))))

            # Put the label for this hostname roughly in the middle of its bar
            # cluster
            start_bar.xTickLabels.append(hostname)
            # Subtracting 0.5 to account for half the width of the bar
            start_bar.xTickLabelPoints.append(offset + (num_y_values / 2.0)
                                              - 0.5)

            offset += num_y_values

            bar.xValues = range(len(bar.yValues))
            bar.color = bar_colors[i % len(bar_colors)]
            bar.label = hostname

        stacked_bars = StackedBars()
        stacked_bars.add(start_bar)

        for hostname in sorted(bars.keys()):
            stacked_bars.add(bars[hostname])

        plot = Plot()
        plot.setYLimits(0, ((max_timestamp - min_timestamp) / 1000000.0) * 1.05)
        plot.setXLabel("Worker")
        plot.setYLabel("Time (s)")
        plot.setTitle(stage)

        plot.add(stacked_bars)
        layout.addPlot(plot)

    return layout
示例#21
0
#!/usr/bin/env python

from boomslang import Bar, Line, Scatter, Plot, PlotLayout

line = Line()
line.xValues = range(5)
line.yValues = [2, 4, 6, 8, 10]

linePlot = Plot()
linePlot.add(line)
linePlot.setXLabel("X Data")
linePlot.setYLabel("Y Data")
linePlot.setTitle("Data as Line")

bar = Bar()
bar.xValues = range(5)
bar.yValues = [2, 4, 6, 8, 10]

barPlot = Plot()

barPlot.add(bar)
barPlot.setXLabel("X Data")
barPlot.setYLabel("Y Data")
barPlot.setTitle("Data as Bars")

scatter = Scatter()
scatter.xValues = range(5)
scatter.yValues = [2, 4, 6, 8, 10]

scatterPlot = Plot()
scatterPlot.add(scatter)
示例#22
0
文件: twinx.py 项目: crazyideas21/dev
#!/usr/bin/env python

from boomslang import Line, Plot

line1 = Line()
line1.xValues = range(7)
line1.yValues = [1, 2, 4, 8, 16, 32, 64]
line1.label = "First Plot"
line1.lineStyle = "-"
line1.color = "red"

line2 = Line()
line2.xValues = range(7)
line2.yValues = [100, 90, 80, 70, 60, 50, 40]
line2.label = "Second Plot"
line2.lineStyle = "--"
line2.color = "blue"

plot = Plot()
plot.add(line1)
plot.add(line2)
plot.setXLabel("Shared X Axis")
plot.setYLabel("First Plot's Y Axis")
plot.setTwinX("Second Plot's Y Axis", 1)
plot.hasLegend()

plot.save("twinx.png")
示例#23
0
文件: bar.py 项目: crazyideas21/dev
#!/usr/bin/env python

from boomslang import Bar, Plot

plot = Plot()

bar = Bar()
bar.xValues = range(5)
bar.yValues = [2, 8, 4, 6, 5]

plot.add(bar)
plot.setXLabel("Widget ID")
plot.setYLabel("# Widgets Sold")

plot.save("bar.png")
示例#24
0
文件: label.py 项目: crazyideas21/dev
#!/usr/bin/env python

from boomslang import Label, Line, Plot
import numpy

line = Line()
line.xValues = numpy.arange(0.0, 5.0, 0.01)
line.yValues = numpy.cos(2 * numpy.pi * line.xValues)

maxLabel = Label(2, 1, "Maximum!")
maxLabel.setTextOffset(0.5, 0.5)
maxLabel.hasArrow()

minLabel = Label(1.5, -1, "Minimum!")
minLabel.setTextPosition(1, -2)
minLabel.hasArrow()

randomLabel = Label(2, -1.7, "A Point!")
randomLabel.setTextOffset(0, 0.2)
randomLabel.marker = 'o'

plot = Plot()
plot.add(line)
plot.add(minLabel)
plot.add(maxLabel)
plot.add(randomLabel)
plot.setYLimits(-3, 3)
plot.setXLabel("X")
plot.setYLabel("cos(x)")
plot.save("label.png")
def plot_timeline_for_phase(log_directory, job, phase, phase_data):
    min_timestamp = phase_data["min_timestamp"]
    max_timestamp = phase_data["max_timestamp"]

    description = Description(os.path.join(log_directory, job, "description"))
    stage_ordering = description.getStageOrdering(phase)

    duration_lists = {}

    for stage in stage_ordering:
        duration_lists[stage] = []

    for key in phase_data:
        if key in ["min_timestamp", "max_timestamp"]:
            continue

        hostname, stage, worker_id = key

        worker_duration_info = Duration(
            hostname.split('.')[0], stage, worker_id,
            (phase_data[key][0] - min_timestamp) / 1000000.0,
            (phase_data[key][1] - min_timestamp) / 1000000.0)

        duration_lists[stage].append(worker_duration_info)

    def sort_function(x):
        return (x.hostname, x.worker_id, x.start_time, x.stop_time)

    layout = PlotLayout()

    for stage in stage_ordering:
        duration_list = duration_lists[stage]

        duration_list.sort(key=sort_function)

        bars = {}

        # Set up a "padding" bar that will appear to move bars up so that they
        # start when the worker starts
        start_bar = Bar()
        start_bar.linewidth = 0
        start_bar.color = "white"

        for i, duration in enumerate(duration_list):
            if duration.hostname not in bars:
                bars[duration.hostname] = Bar()

            bars[duration.hostname].yValues.append(duration.stop_time -
                                                   duration.start_time)
            start_bar.yValues.append(duration.start_time)

        # Make sure that all bars have the same number of y-axis values,
        # give them x-axis values and set their colors

        start_bar.xValues = range(len(start_bar.yValues))
        start_bar.xTickLabelProperties = {"rotation": 90}

        bar_colors = [
            "red", "blue", "green", "orange", "gray", "pink", "purple", "black"
        ]

        offset = 0

        for i, (hostname, bar) in enumerate(bars.items()):
            # Pad y axis with zeroes so that bars can be laid out next to
            # each other with a StackedBars
            num_y_values = len(bar.yValues)

            bar.yValues = (([0] * offset) + bar.yValues +
                           ([0] * (len(duration_list) -
                                   (num_y_values + offset))))

            # Put the label for this hostname roughly in the middle of its bar
            # cluster
            start_bar.xTickLabels.append(hostname)
            # Subtracting 0.5 to account for half the width of the bar
            start_bar.xTickLabelPoints.append(offset + (num_y_values / 2.0) -
                                              0.5)

            offset += num_y_values

            bar.xValues = range(len(bar.yValues))
            bar.color = bar_colors[i % len(bar_colors)]
            bar.label = hostname

        stacked_bars = StackedBars()
        stacked_bars.add(start_bar)

        for hostname in sorted(bars.keys()):
            stacked_bars.add(bars[hostname])

        plot = Plot()
        plot.setYLimits(0,
                        ((max_timestamp - min_timestamp) / 1000000.0) * 1.05)
        plot.setXLabel("Worker")
        plot.setYLabel("Time (s)")
        plot.setTitle(stage)

        plot.add(stacked_bars)
        layout.addPlot(plot)

    return layout
示例#26
0
    bar4 = Bar()
    bar4.xValues = threadsData["4"][0]
    bar4.yValues = threadsData["4"][1]
    bar4.color = "orange"
    bar4.label = "4 Threads"

    bar8 = Bar()
    bar8.xValues = threadsData["8"][0]
    bar8.yValues = threadsData["8"][1]
    bar8.color = "yellow"
    bar8.label = "8 Threads"

    clusteredBars = ClusteredBars()

    clusteredBars.add(bar1)
    clusteredBars.add(bar2)
    clusteredBars.add(bar3)
    clusteredBars.add(bar4)
    clusteredBars.add(bar8)
    clusteredBars.spacing = 0.1

    clusteredBars.xTickLabels = ["1", "21", "41", "61", "81", "101"]

    plot = Plot()
    plot.add(clusteredBars)
    plot.setXLabel("K")
    plot.setYLabel("WpS")
    plot.hasLegend()

    plot.save("omp_for.png")
示例#27
0
文件: latex.py 项目: crazyideas21/dev
#!/usr/bin/env python

from boomslang import Line, Plot, PlotLayout

line = Line()
line.xValues = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
line.yValues = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

plot = Plot()
plot.useLatexLabels()
plot.setXLabel(r"$x$")
plot.setYLabel(r"$f(x) = x^2$")
plot.setTitle(r"LaTeX is Number $\sum_{n=1}^{\infty}\frac{-e^{i\pi}}{2^n}$")
plot.add(line)

layout = PlotLayout()
layout.addPlot(plot)

layout.setAxesLabelSize(18)
layout.setPlotParameters(top=0.84)
layout.save("latex.png")
        y = (float(row1[' OptWpS']) + float(row2[' OptWpS']) + float(row3[' OptWpS'])) / 3.0
        dataY.append(y)
        y = (float(row1[' Opt2WpS']) + float(row2[' Opt2WpS']) + float(row3[' Opt2WpS'])) / 3.0
        dataY.append(y)

    except:
        pass


    bars = []
    labels = ['Reference', 'OMP - For', 'OMP - Tasks', 'Comp-Opt', 'Manual-Opt']
    colors = ['yellow', 'red', 'orange', 'blue', 'green']
    index = 0
    for y in dataY:
        bar = Bar()
        bar.xValues = [index]
        bar.yValues = [y]
        bar.color =  colors[index]
        bar.label = labels[index]
        index += 1
        bars.append(bar)

    plot = Plot()
    for bar in bars:
        plot.add(bar)
    plot.setXLabel("Versions")
    plot.setYLabel("WpS")
    plot.hasLegend()

    plot.save("seq.png")