diff options
Diffstat (limited to 'csv_to_svg_path.py')
-rwxr-xr-x | csv_to_svg_path.py | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/csv_to_svg_path.py b/csv_to_svg_path.py new file mode 100755 index 0000000..5f638ed --- /dev/null +++ b/csv_to_svg_path.py @@ -0,0 +1,43 @@ +#!/usr/bin/env python3 +import textwrap + +def svg_path_from_points(points, r): + points_joined = ' '.join(f'{x:.6f} {y:.6f}' for x, y in points) + return textwrap.dedent(f''' + <?xml version="1.0" encoding="UTF-8" standalone="no"?> + <svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + width="{r*2}mm" + height="{r*2}mm" + viewBox="0 0 {r*2} {r*2}" + id="svg2"> + <g id="layer1"> + <path id="path2991" + style="fill:none;stroke:#000000;stroke-width:0.1mm;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 0,0 L {points_joined}" /> + </g> + </svg> + ''').strip() + +if __name__ == '__main__': + import argparse + parser = argparse.ArgumentParser() + parser.add_argument('locus_csv', help='CSV file containing locus coordinates. Format: lambda, x, y, z.') + parser.add_argument('-r', '--radius', type=float, default=100, help='Radius of plot area in mm') + args = parser.parse_args() + + import csv, ast + points = [] + with open(args.locus_csv, newline='') as f: + for row in csv.reader(f): + # use literal_eval to handle entries like "1.153E-5" + λ, x, y, z = (ast.literal_eval(e.strip()) for e in row) + points.append((x*args.radius*2, y*args.radius*2)) + + print(svg_path_from_points(points, args.radius)) |