def plot_by_variable(details): '''Plot each .csv files under @plot_node as a line on a shared plot.''' builder = ColMapBuilder() config_nodes = [] # Decode file names into configuration dicts for line_path, line_node in details.node.children.iteritems(): encoded = line_path[:line_path.index(".csv")] try: line_config = ColMap.decode(encoded) except: line_config = {'name': encoded} for k, v in line_config.iteritems(): builder.try_add(k, v) config_nodes += [(line_config, line_node)] col_map = builder.build() style_map = make_styler(col_map) figure = plot.figure() axes = figure.add_subplot(111) # Create a line for each file node and its configuration for line_config, line_node in config_nodes: style = style_map.get_style(line_config) values = sorted(line_node.values, key=lambda tup: tup[0]) xvalues, yvalues = zip(*values) plot.plot(xvalues, yvalues, style.fmt()) axes.set_title(details.title) lines, labels = zip(*style_map.get_key()) axes.legend( tuple(lines), tuple(labels), prop={'size': 10}, # This code places the legend slightly to the right of the plot bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0) axes.set_ylabel(details.value) axes.set_xlabel(details.variable) axes.set_xlim(0, axes.get_xlim()[1]) axes.set_ylim(0, axes.get_ylim()[1]) plot.savefig( details.out, format=OUT_FORMAT, # Using 'tight' causes savefig to rescale the image for non-plot # artists, which in our case is just the legend bbox_inches='tight') return True
def plot_by_variable(details): '''Plot each .csv files under @plot_node as a line on a shared plot.''' builder = ColMapBuilder() config_nodes = [] # Decode file names into configuration dicts for line_path, line_node in details.node.children.iteritems(): encoded = line_path[:line_path.index(".csv")] try: line_config = ColMap.decode(encoded) except: line_config = {'name': encoded} for k, v in line_config.iteritems(): builder.try_add(k, v) config_nodes += [(line_config, line_node)] col_map = builder.build() style_map = make_styler(col_map) figure = plot.figure() axes = figure.add_subplot(111) # Create a line for each file node and its configuration for line_config, line_node in config_nodes: style = style_map.get_style(line_config) values = sorted(line_node.values, key=lambda tup: tup[0]) xvalues, yvalues = zip(*values) plot.plot(xvalues, yvalues, style.fmt()) axes.set_title(details.title) lines, labels = zip(*style_map.get_key()) axes.legend(tuple(lines), tuple(labels), prop={'size':10}, # This code places the legend slightly to the right of the plot bbox_to_anchor=(1.05, 1), loc=2, borderaxespad=0.0) axes.set_ylabel(details.value) axes.set_xlabel(details.variable) axes.set_xlim(0, axes.get_xlim()[1]) axes.set_ylim(0, axes.get_ylim()[1]) plot.savefig(details.out, format=OUT_FORMAT, # Using 'tight' causes savefig to rescale the image for non-plot # artists, which in our case is just the legend bbox_inches='tight') return True
def plot_by_variable(details): '''Plot each .csv files under @plot_node as a line on a shared plot.''' builder = ColMapBuilder() config_nodes = [] # Generate mapping of (column)=>(line property to vary) for consistently # formatted plots for line_path, line_node in details.node.children.iteritems(): encoded = line_path[:line_path.index(".csv")] try: line_config = ColMap.decode(encoded) except: line_config = {'name': encoded} for k, v in line_config.iteritems(): builder.try_add(k, v) config_nodes += [(line_config, line_node)] col_map = builder.build() style_map = StyleMap(col_map.columns(), col_map.get_values()) figure = plot.figure() axes = figure.add_subplot(111) # Create a line for each file node and its configuration for line_config, line_node in config_nodes: # Create line style to match this configuration style = style_map.get_style(line_config) values = sorted(line_node.values, key=lambda tup: tup[0]) xvalues, yvalues = zip(*values) plot.plot(xvalues, yvalues, style.fmt()) axes.set_title(details.title) lines, labels = zip(*style_map.get_key()) axes.legend(tuple(lines), tuple(labels), prop={'size':10}) axes.set_ylabel(details.value) axes.set_xlabel(details.variable) axes.set_xlim(0, axes.get_xlim()[1] + 1) axes.set_ylim(0, axes.get_ylim()[1] + 1) plot.savefig(details.out, format=OUT_FORMAT) return True