---
title: Explicit Reporting - Jupyter Notebook
---

The [jupyter_logging_example.ipynb](https://github.com/allegroai/clearml/blob/master/examples/reporting/jupyter_logging_example.ipynb) 
script demonstrates the integration of **ClearML** explicit reporting running in a Jupyter Notebook. All **ClearML** 
explicit reporting works with Jupyter Notebook. 

This example includes several types of explicit reporting, including: 
* Scalars
* Some plots 
* Media.

:::note
In the ``clearml`` GitHub repository, this example includes a clickable icon to open the notebook in Google Colab.
:::

## Scalars

To reports scalars, call the [Logger.report_scalar](../../references/sdk/logger.md#report_scalar) 
method. The scalar plots appear in the **web UI** in **RESULTS** **>** **SCALARS**.

    # report two scalar series on two different graphs
    for i in range(10):
        logger.report_scalar("graph A", "series A", iteration=i, value=1./(i+1))
        logger.report_scalar("graph B", "series B", iteration=i, value=10./(i+1))

![image](../../img/colab_explicit_reporting_01.png)

    # report two scalar series on the same graph
    for i in range(10):
        logger.report_scalar("unified graph", "series A", iteration=i, value=1./(i+1))
        logger.report_scalar("unified graph", "series B", iteration=i, value=10./(i+1))

![image](../../img/colab_explicit_reporting_02.png)

## Plots

Plots appear in **RESULTS** **>** **PLOTS**.

### 2D Plots

Report 2D scatter plots by calling the [Logger.report_scatter2d](../../references/sdk/logger.md#report_scatter2d) method. 
Use the `mode` parameter to plot data points as markers, or both lines and markers.

    scatter2d = np.hstack(
        (np.atleast_2d(np.arange(0, 10)).T, np.random.randint(10, size=(10, 1)))
    )
    # report 2d scatter plot with markers
    logger.report_scatter2d(
        "example_scatter",
        "series_lines+markers",
        iteration=iteration,
        scatter=scatter2d,
        xaxis="title x",
        yaxis="title y",
        mode='lines+markers'
    )

![image](../../img/colab_explicit_reporting_04.png)

### 3D Plots

To plot a series as a 3-dimensional scatter plot, use the [Logger.report_scatter3d](../../references/sdk/logger.md#report_scatter3d) method.

    # report 3d scatter plot
    scatter3d = np.random.randint(10, size=(10, 3))
    logger.report_scatter3d(
        "example_scatter_3d",
        "series_xyz",
        iteration=iteration,
        scatter=scatter3d,
        xaxis="title x",
        yaxis="title y",
        zaxis="title z",
    )

![image](../../img/colab_explicit_reporting_05.png)

To plot a series as a surface plot, use the [Logger.report_surface](../../references/sdk/logger.md#report_surface) 
method.

    # report 3d surface
    surface = np.random.randint(10, size=(10, 10))
    logger.report_surface(
        "example_surface",
        "series1",
        iteration=iteration,
        matrix=surface,
        xaxis="title X",
        yaxis="title Y",
        zaxis="title Z",
    )

![image](../../img/colab_explicit_reporting_06.png)

### Confusion matrices

Report confusion matrices by calling the [Logger.report_matrix](../../references/sdk/logger.md#report_matrix) 
method.

    # report confusion matrix
    confusion = np.random.randint(10, size=(10, 10))
    logger.report_matrix(
        "example_confusion",
        "ignored",
        iteration=iteration,
        matrix=confusion,
        xaxis="title X",
        yaxis="title Y",
    )

![image](../../img/colab_explicit_reporting_03.png)

### Histograms

Report histograms by calling the [Logger.report_histogram](../../references/sdk/logger.md#report_histogram) 
method. To report more than one series on the same plot, use the same `title` argument.

    # report a single histogram
    histogram = np.random.randint(10, size=10)
    logger.report_histogram(
        "single_histogram",
        "random histogram",
        iteration=iteration,
        values=histogram,
        xaxis="title x",
        yaxis="title y",
    )
    
![image](../../img/colab_explicit_reporting_12.png)
    
    # report a two histograms on the same plot
    histogram1 = np.random.randint(13, size=10)
    histogram2 = histogram * 0.75
    logger.report_histogram(
        "two_histogram",
        "series 1",
        iteration=iteration,
        values=histogram1,
        xaxis="title x",
        yaxis="title y",
    )
    logger.report_histogram(
        "two_histogram",
        "series 2",
        iteration=iteration,
        values=histogram2,
        xaxis="title x",
        yaxis="title y",
    )

![image](../../img/colab_explicit_reporting_07.png)

## Media

Report audio, HTML, image, and video by calling the [Logger.report_media](../../references/sdk/logger.md#report_media) 
method using the `local_path` parameter. They appear in **RESULTS** **>** **DEBUG SAMPLES**.

The media for these examples is downloaded using the [StorageManager.get_local_copy](../../references/sdk/storage.md#storagemanagerget_local_copy) 
method.

For example, to download an image:

    image_local_copy = StorageManager.get_local_copy(
        remote_url="https://pytorch.org/tutorials/_static/img/neural-style/picasso.jpg",
        name="picasso.jpg"
    )

### Audio

    logger.report_media('audio', 'pink panther', iteration=1, local_path=audio_local_copy)

![image](../../img/colab_explicit_reporting_08.png)

### HTML

    logger.report_media("html", "url_html", iteration=1, url="https://allegro.ai/docs/index.html")

![image](../../img/colab_explicit_reporting_09.png)

### Images

    logger.report_image("image", "image from url", iteration=100, local_path=image_local_copy)

![image](../../img/colab_explicit_reporting_10.png)

### Video

    logger.report_media('video', 'big bunny', iteration=1, local_path=video_local_copy)

![image](../../img/colab_explicit_reporting_11.png)

## Text

Report text messages by calling the [Logger.report_text](../../references/sdk/logger.md#report_text). 

    logger.report_text("hello, this is plain text")
    
![image](../../img/colab_explicit_reporting_13.png)