def test_plotting_construct(): """Test that a construct can be plotted.""" renderer = psv.GlyphRenderer() fig, ax = plt.subplots() construct = psv.Construct([["RibosomeEntrySite", None, None]], renderer, fig=fig, ax=ax, start_position=(0, 0), gapsize=20, padding=10) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0, 0, 0), linewidth=1.5, zorder=0)
def test_plotting_interactions(): """Test loading glyphs from SVGs with no errors/exceptions.""" renderer = psv.GlyphRenderer() part_list = [["Promoter", None, None], ["Promoter", None, None]] int_list = [[ part_list[0], part_list[1], 'inhibition', { 'color': (1, 0, 0), 'headheight': 13.0, 'headwidth': 14.0, 'zorder': 2, 'direction': 'forward', 'linewidth': 2.0, 'heightskew': 15.0, 'sending_length_skew': 3.0, 'receiving_length_skew': 4.0, 'distance_from_baseline': 27.0 } ]] construct = psv.Construct(part_list, renderer, interaction_list=int_list) fig, ax, baseline_start, baseline_end, bounds = construct.draw()
def render_input(string, rotation, gapsize, interaction, save, savetype, savepath, fill): """Renders a construct from an input string. Parameters ---------- string: str Input string containing construct details. rotation: str String containing expression of rotation to be evaluated gapsize: float Size of the gap between construct parts. interaction: str String to be processed defining either a single or multiple interactions. """ parts = parse_string(string) part_list = format_parts(parts, renderer, fill) if rotation != '': rotation = safe_eval(rotation) else: rotation = 0.0 if interaction != '': interaction = process_interactions(interaction, part_list) else: interaction = None construct = psv.Construct(part_list, renderer, rotation=rotation, gapsize = gapsize, interaction_list = interaction) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0,0,0), linewidth=1.5, zorder=0) if save == 1: filename = f'pSBOLv-cli-output.{savetype}' if savepath != '': filename = f'{savepath}/{filename}' fig.savefig(filename, dpi=300) else: plt.show()
part_list.append([part, None, None]) part_list.append([part, {'orientation': 'reverse'}, None]) length = len(part_list) r = length % 12 number_of_rows = int((length - r) / 12) for n in range(number_of_rows + 1): parts_to_draw = part_list[n * 12:((n + 1) * 12)] if len(parts_to_draw) == 0: break start_position = (start_position[0], start_position[1] - 40) construct = psv.Construct(parts_to_draw, renderer, fig=fig, ax=ax, start_position=start_position, gapsize=20, padding=10) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0, 0, 0), linewidth=1.5, zorder=0) bounds_list.append(bounds) # Plot glyphs not on backbone parts = list(renderer.glyphs_library.keys()) part_list = []
[part_list[0], part_list[1], 'inhibition', { 'color': (0.75, 0, 0) }]) interaction_list.append([ part_list[2], part_list[3], 'control', { 'color': (0, 0.75, 0), 'direction': 'reverse' } ]) # Create renderer renderer = psv.GlyphRenderer() # Plot Construct construct = psv.Construct(part_list, renderer, interaction_list=interaction_list) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0, 0, 0), linewidth=1.5, zorder=0) # You can also manually plot interactions: # interaction_bounds = psv.draw_interaction(ax, ((50, 15), (50, 15)), ((60, 15), (60, 15)), 'process', None) fig.savefig('06_draw_interactions.pdf', transparent=True, dpi=300) fig.savefig('06_draw_interactions.jpg', dpi=300) plt.show()
gff_el[5]['style_parameters'] ]) else: if 'user_parameters' in gff_el[5]: part_list.append( [gff_el[1], gff_el[5]['user_parameters'], None]) else: part_list.append( [gff_el[1], None, gff_el[5]['style_parameters']]) return part_list part_list = load_part_list_from_gff('./04_plot_gff.gff', 'chrom1', type_map=gffsvgtype_map) renderer = psv.GlyphRenderer() construct = psv.Construct(part_list, renderer) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0, 0, 0), linewidth=1.5, zorder=0) fig.savefig('04_plot_gff.pdf', transparent=True, dpi=300) fig.savefig('04_plot_gff.jpg', dpi=300) plt.show()
None, None ] ) part_list.append( ['CDS', {'orientation':'reverse'}, None ] ) part_list.append( ['CDS', {'orientation':'reverse'}, None ] ) # Create renderer renderer = psv.GlyphRenderer() # Draw construct construct = psv.Construct(part_list, renderer) fig, ax, baseline_start, baseline_end, bounds = construct.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0,0,0), linewidth=1.5, zorder=0) # Draw rotated construct construct_2 = psv.Construct(part_list, renderer, fig=fig, ax=ax, start_position=(0,-30), additional_bounds_list=[bounds]) construct_2.rotation = 3.142 / -8 construct_2.update_bounds() # Update bounds to new orientation of construct fig, ax, baseline_start, baseline_end, bounds = construct_2.draw() ax.plot([baseline_start[0], baseline_end[0]], [baseline_start[1], baseline_end[1]], color=(0,0,0), linewidth=1.5, zorder=0) fig.savefig('03_plot_constructs.pdf', transparent=True, dpi=300) fig.savefig('03_plot_constructs.jpg', dpi=300) plt.show()