Visualization
==============

Different visualization methods are available in *pathology-image-features* to represent properties a object might have as well as to see the order of processes in a pipeline more clearly.


Graphviz Integration
---------------------

*graphviz* is used for generating visualizations containing labeled nodes and edges, making it useful for visualizing triples from a graph. To view the serialization of a term in *pathology-image-features*, you can use the "graphviz" method of any class.

.. code-block:: python

    from pathology_image_features.ontology import PIFO

    Person = PIFO.to_python('http://schema.org/Person')
    software_developer_role = PIFO.to_python('http://purl.obolibrary.org/obo/PIFO_0000055')

    person_instance = Person(
        label = "Sam",
        has_role = software_developer_role()
    )
    person_instance.graphviz(filepath = "./tests/output/person_graph.gv")


.. image:: ../images/graphviz_example.png
    :alt: Graphviz visualization of a person instance


Specific Entity Visualization
-----------------------------

In addition to visualizing entity's properties and relations to other entities, you may also be interested in visualizing the underlying data that is represented by a term.
For example, custom visualization methods may be added in order to highlight which parts of an input item are considered in a specific type of transformation or quantification.

These methods may be accessed through the "visualize" method of any class. For those where a specific visualization is not implemented, a blank axis will be returned with the label/name of the class for that item.

.. code-block:: python

    import matplotlib.pyplot as plt
    from pathology_image_features.ontology import PIFO

    path_to_annotations = "./tests/data/histology_annotations.json"
    annotations = histomics_to_geojson(read_histomics(path_to_annotations))
    path_to_image = "./tests/data/histology_image.svs"

    annotated_image_data_set = PIFO.to_python(
        "http://purl.obolibrary.org/obo/PIFO_0000002"
    )
    test_annotated_image_data_set = annotated_image_data_set.construct(
        image_data_set_kwargs={"filepath": path_to_image},
        annotations_kwargs=[{"has_spatial": ann} for ann in annotations],
    )

    fig, ax = plt.subplots()
    axis = test_annotated_image_data_set.visualize()
    plt.savefig("./tests/data/annotated_data_visualization.png")


.. image:: ../images/annotated_data_visualization.png
    :alt: Visualization of annotated image data set
