achtman-lab / GrapeTree

GrapeTree is a fully interactive, tree visualization program, which supports facile manipulations of both tree layout and metadata. Click the first link to launch: https://achtman-lab.github.io/GrapeTree/MSTree_holder.html
https://genome.cshlp.org/content/28/9/1395
GNU General Public License v3.0
79 stars 26 forks source link

Programmatically create grapetree visualizations #94

Open crarlus opened 3 years ago

crarlus commented 3 years ago

Hi, thanks for grapetree, we use it a lot by uploading a mstree and metadata to a local grapetree instance in the browser.

However I wonder whether it is possible to create the grapetree visualizions (i.e. the json file) programmatically from the command line?

For instance, is there any such option as grapetree --json --treefile mstree.nwk --meta metadata.tsv > grapetree_viz.json ?

This would be really helpful for updating the visualization whenever new data is available.

eam12 commented 3 years ago

I agree. This type of command would be very useful! As great as the interactive program is, it can be laborious when I have to generate multiple MSTs with different subsets of data, node colors, etc.

HBrendy commented 1 year ago

I agree, too. Another nice feature would be the preloading of a json file before launching the local browser instance.

lskatz commented 4 months ago

I came looking for this!! I would like this feature too. I'll bet that the hangup is that it is programmed in javascript instead of python. Maybe somewhere in here. I think it would be a great addition to bring it into the command line. https://github.com/achtman-lab/GrapeTree/blob/master/static/js/tree/d3_m_tree.js

Can anyone find the relevant code? I can't figure it out yet.

lskatz commented 4 months ago

This is my MST based on a sample lambda dataset if it helps anyone either in programming it or finding where it is programmed.

{
    "links": [
        {
            "source": 0,
            "target": 1,
            "distance": 85
        },
        {
            "source": 0,
            "target": 2,
            "distance": 80
        },
        {
            "source": 0,
            "target": 3,
            "distance": 75
        },
        {
            "source": 0,
            "target": 4,
            "distance": 0
        }
    ],
    "nodes": [
        "_hypo_0",
        "sample1",
        "sample2",
        "sample3",
        "sample4"
    ],
    "layout_data": {
        "node_positions": {
            "sample4": [
                508.6975515344812,
                621.3798986409274
            ],
            "sample1": [
                1028.5434415728532,
                608.720885637819
            ],
            "sample2": [
                28.764701999876763,
                723.0719659155677
            ],
            "sample3": [
                584.0186640866862,
                166.39586921998318
            ]
        },
        "nodes_links": {
            "max_link_length": 10000,
            "max_link_scale": 500,
            "base_node_size": 10,
            "size_power": 0.5,
            "link_font_size": 14,
            "show_link_labels": false,
            "show_node_labels": false,
            "node_font_size": 12,
            "custom_colours": {},
            "hide_link_length": 10000,
            "show_individual_segments": false,
            "node_collapsed_value": 0,
            "manual_collapsing": {},
            "custom_color_scheme": [
                "#1f77b4",
                "#aec7e8",
                "#ff7f0e",
                "#ffbb78",
                "#2ca02c",
                "#98df8a",
                "#d62728",
                "#ff9896",
                "#9467bd",
                "#c5b0d5",
                "#8c564b",
                "#c49c94",
                "#e377c2",
                "#f7b6d2",
                "#7f7f7f",
                "#c7c7c7",
                "#bcbd22",
                "#dbdb8d",
                "#17becf",
                "#9edae5",
                "#393b79",
                "#5254a3",
                "#6b6ecf",
                "#9c9ede",
                "#637939",
                "#8ca252",
                "#b5cf6b",
                "#cedb9c",
                "#8c6d31",
                "#bd9e39",
                "#e7ba52",
                "#e7cb94",
                "#843c39",
                "#ad494a",
                "#d6616b",
                "#e7969c",
                "#7b4173",
                "#a55194",
                "#ce6dbd",
                "#de9ed6",
                "#3182bd",
                "#6baed6",
                "#9ecae1",
                "#c6dbef",
                "#e6550d",
                "#fd8d3c",
                "#fdae6b",
                "#fdd0a2",
                "#31a354",
                "#74c476",
                "#a1d99b",
                "#c7e9c0",
                "#756bb1",
                "#9e9ac8",
                "#bcbddc",
                "#dadaeb",
                "#636363",
                "#969696",
                "#bdbdbd",
                "#d9d9d9"
            ]
        },
        "scale": 0.7095940084767466,
        "translate": [
            174,
            -64
        ],
        "display_category": "nothing"
    },
    "metadata": {
        "_hypo_0": {
            "ID": "_hypo_0",
            "__Node": "_hypo_0"
        },
        "sample1": {
            "ID": "sample1",
            "__Node": "sample1",
            "__selected": false,
            "id": 1
        },
        "sample2": {
            "ID": "sample2",
            "__Node": "sample2",
            "__selected": false,
            "id": 2
        },
        "sample3": {
            "ID": "sample3",
            "__Node": "sample3",
            "__selected": false,
            "id": 3
        },
        "sample4": {
            "ID": "sample4",
            "__Node": "sample4",
            "__selected": false,
            "id": 4
        }
    },
    "initial_category": "nothing",
    "category_num": 30,
    "newickTree": "(sample1:85,sample2:80,sample3:75,sample4:0);",
    "metadata_options": {
        "nothing": {
            "label": "No Category",
            "coltype": "character",
            "grouptype": "size",
            "colorscheme": "category",
            "minnum": 0,
            "category_num": 30
        },
        "ID": {
            "label": "ID",
            "coltype": "character",
            "grouptype": "size",
            "colorscheme": "category",
            "minnum": 0
        }
    }
}