1 // Copyright (C) The Lightning Authors. All rights reserved.
3 // SPDX-License-Identifier: AGPL-3.0
13 "git.arvados.org/arvados.git/sdk/go/arvados"
16 type pythonPlot struct{}
18 func (cmd *pythonPlot) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
22 fmt.Fprintf(stderr, "%s\n", err)
25 flags := flag.NewFlagSet("", flag.ContinueOnError)
26 flags.SetOutput(stderr)
27 projectUUID := flags.String("project", "", "project `UUID` for output data")
28 inputFilename := flags.String("i", "-", "input `file`")
29 sampleListFilename := flags.String("samples", "", "use second column of `samples.csv` as complete list of sample IDs")
30 colormapFilename := flags.String("colormap", "", "use first two columns of `colormap.csv` as id->color mapping")
31 priority := flags.Int("priority", 500, "container request priority")
32 err = flags.Parse(args)
33 if err == flag.ErrHelp {
36 } else if err != nil {
40 runner := arvadosContainerRunner{
41 Name: "lightning plot",
42 Client: arvados.NewClientFromEnv(),
43 ProjectUUID: *projectUUID,
47 Mounts: map[string]map[string]interface{}{
48 "/plot.py": map[string]interface{}{
50 "content": plotscript,
54 err = runner.TranslatePaths(inputFilename, sampleListFilename, colormapFilename)
58 runner.Prog = "python3"
59 runner.Args = []string{"/plot.py", *inputFilename, *sampleListFilename, *colormapFilename, "/mnt/output/plot.png"}
61 output, err = runner.Run()
65 fmt.Fprintln(stdout, output+"/plot.png")
77 X = scipy.load(infile)
83 with open(sys.argv[2], 'rt') as samplelist:
84 for row in csv.reader(samplelist):
87 with open(sys.argv[3], 'rt') as colormap:
88 for row in csv.reader(colormap):
124 if (id in labels) and (labels[id] in labelcolors):
125 colors.append(labelcolors[labels[id]])
127 colors.append('black')
129 from matplotlib.figure import Figure
130 from matplotlib.patches import Polygon
131 from matplotlib.backends.backend_agg import FigureCanvasAgg
133 ax = fig.add_subplot(111)
134 ax.scatter(X[:,0], X[:,1], c=colors, s=60, marker='o', alpha=0.5)
135 canvas = FigureCanvasAgg(fig)
136 canvas.print_figure(sys.argv[4], dpi=80)