mirror of
https://github.com/clearml/clearml
synced 2025-04-05 21:26:20 +00:00
Add direct plotly figure reporting (see issue #136)
This commit is contained in:
parent
8a5f6b7d02
commit
20a9f0997d
14
examples/report_plotly.py
Normal file
14
examples/report_plotly.py
Normal file
@ -0,0 +1,14 @@
|
||||
# TRAINS - Example of Plotly integration and reporting
|
||||
#
|
||||
from trains import Task
|
||||
import plotly.express as px
|
||||
|
||||
|
||||
task = Task.init('examples', 'plotly report')
|
||||
|
||||
df = px.data.iris()
|
||||
fig = px.scatter(df, x="sepal_width", y="sepal_length", color="species", marginal_y="rug", marginal_x="histogram")
|
||||
|
||||
task.get_logger().report_plotly(title="iris", series="sepal", iteration=0, figure=fig)
|
||||
|
||||
print('done')
|
@ -176,10 +176,16 @@ class Reporter(InterfaceBase, AbstractContextManager, SetupUploadMixin, AsyncMan
|
||||
:param iter: Iteration number
|
||||
:type value: int
|
||||
"""
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
def default(o):
|
||||
if isinstance(o, np.int64):
|
||||
return int(o)
|
||||
# Special json encoder for numpy types
|
||||
def default(obj):
|
||||
if isinstance(obj, (np.integer, np.int64)):
|
||||
return int(obj)
|
||||
elif isinstance(obj, np.floating):
|
||||
return float(obj)
|
||||
elif isinstance(obj, np.ndarray):
|
||||
return obj.tolist()
|
||||
except Exception:
|
||||
default = None
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import logging
|
||||
import math
|
||||
import warnings
|
||||
from typing import Any, Sequence, Union, List, Optional, Tuple
|
||||
from typing import Any, Sequence, Union, List, Optional, Tuple, Dict
|
||||
|
||||
import numpy as np
|
||||
import six
|
||||
@ -130,9 +130,9 @@ class Logger(object):
|
||||
|
||||
You can view the scalar plots in the **Trains Web-App (UI)**, **RESULTS** tab, **SCALARS** sub-tab.
|
||||
|
||||
:param str title: The title of the plot. Plot more than one scalar series on the same plot by using
|
||||
:param str title: The title (metric) of the plot. Plot more than one scalar series on the same plot by using
|
||||
the same ``title`` for each call to this method.
|
||||
:param str series: The title of the series.
|
||||
:param str series: The series name (variant) of the reported scalar.
|
||||
:param float value: The value to plot per iteration.
|
||||
:param int iteration: The iteration number. Iterations are on the x-axis.
|
||||
"""
|
||||
@ -168,8 +168,8 @@ class Logger(object):
|
||||
|
||||
You can view the vectors plots in the **Trains Web-App (UI)**, **RESULTS** tab, **PLOTS** sub-tab.
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported histogram.
|
||||
:param list(float) values: The series values. A list of floats, or an N-dimensional Numpy array containing
|
||||
data for each histogram bar.
|
||||
:type values: list(float), numpy.ndarray
|
||||
@ -215,8 +215,8 @@ class Logger(object):
|
||||
|
||||
You can view the reported histograms in the **Trains Web-App (UI)**, **RESULTS** tab, **PLOTS** sub-tab.
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported histogram.
|
||||
:param list(float) values: The series values. A list of floats, or an N-dimensional Numpy array containing
|
||||
data for each histogram bar.
|
||||
:type values: list(float), numpy.ndarray
|
||||
@ -282,8 +282,8 @@ class Logger(object):
|
||||
|
||||
You can view the reported tables in the **Trains Web-App (UI)**, **RESULTS** tab, **PLOTS** sub-tab.
|
||||
|
||||
:param str title: The title of the table.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the table.
|
||||
:param str series: The series name (variant) of the reported table.
|
||||
:param int iteration: The iteration number.
|
||||
:param table_plot: The output table plot object
|
||||
:type table_plot: pandas.DataFrame
|
||||
@ -331,7 +331,7 @@ class Logger(object):
|
||||
def report_line_plot(
|
||||
self,
|
||||
title, # type: str
|
||||
series, # type: str
|
||||
series, # type: Sequence[SeriesInfo]
|
||||
iteration, # type: int
|
||||
xaxis, # type: str
|
||||
yaxis, # type: str
|
||||
@ -343,9 +343,8 @@ class Logger(object):
|
||||
"""
|
||||
For explicit reporting, plot one or more series as lines.
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param list(LineSeriesInfo) series: All the series data, one list element for each line
|
||||
in the plot.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param list series: All the series data, one list element for each line in the plot.
|
||||
:param int iteration: The iteration number.
|
||||
:param str xaxis: The x-axis title. (Optional)
|
||||
:param str yaxis: The y-axis title. (Optional)
|
||||
@ -423,8 +422,8 @@ class Logger(object):
|
||||
logger.report_scatter2d("example_scatter", "series_2", iteration=1, scatter=scatter2d_2,
|
||||
xaxis="title x", yaxis="title y")
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported scatter plot.
|
||||
:param list scatter: The scatter data. numpy.ndarray or list of (pairs of x,y) scatter:
|
||||
:param int iteration: The iteration number. To set an initial iteration, for example to continue a previously
|
||||
:param str xaxis: The x-axis title. (Optional)
|
||||
@ -483,8 +482,8 @@ class Logger(object):
|
||||
"""
|
||||
For explicit reporting, plot a 3d scatter graph (with markers).
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported scatter plot.
|
||||
:param Union[numpy.ndarray, list] scatter: The scatter data.
|
||||
list of (pairs of x,y,z), list of series [[(x1,y1,z1)...]], or numpy.ndarray
|
||||
:param int iteration: The iteration number.
|
||||
@ -585,8 +584,8 @@ class Logger(object):
|
||||
logger.report_confusion_matrix("example confusion matrix", "ignored", iteration=1, matrix=confusion,
|
||||
xaxis="title X", yaxis="title Y")
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported confusion matrix.
|
||||
:param numpy.ndarray matrix: A heat-map matrix (example: confusion matrix)
|
||||
:param int iteration: The iteration number.
|
||||
:param str xaxis: The x-axis title. (Optional)
|
||||
@ -635,8 +634,8 @@ class Logger(object):
|
||||
.. note::
|
||||
This method is the same as :meth:`Logger.report_confusion_matrix`.
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported confusion matrix.
|
||||
:param numpy.ndarray matrix: A heat-map matrix (example: confusion matrix)
|
||||
:param int iteration: The iteration number.
|
||||
:param str xaxis: The x-axis title. (Optional)
|
||||
@ -679,8 +678,8 @@ class Logger(object):
|
||||
logger.report_surface("example surface", "series", iteration=0, matrix=surface_matrix,
|
||||
xaxis="title X", yaxis="title Y", zaxis="title Z")
|
||||
|
||||
:param str title: The title of the plot.
|
||||
:param str series: The title of the series.
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported surface.
|
||||
:param numpy.ndarray matrix: A heat-map matrix (example: confusion matrix)
|
||||
:param int iteration: The iteration number.
|
||||
:param str xaxis: The x-axis title. (Optional)
|
||||
@ -751,8 +750,8 @@ class Logger(object):
|
||||
- ``image``
|
||||
- ``matrix``
|
||||
|
||||
:param str title: The title of the image.
|
||||
:param str series: The title of the series of this image.
|
||||
:param str title: The title (metric) of the image.
|
||||
:param str series: The series name (variant) of the reported image.
|
||||
:param int iteration: The iteration number.
|
||||
:param str local_path: A path to an image file.
|
||||
:param str url: A URL for the location of a pre-uploaded image.
|
||||
@ -847,8 +846,8 @@ class Logger(object):
|
||||
|
||||
If you use ``stream`` for a BytesIO stream to upload, ``file_extension`` must be provided.
|
||||
|
||||
:param str title: The title of the media (metric).
|
||||
:param str series: The title of the series of this (variant).
|
||||
:param str title: The title (metric) of the media.
|
||||
:param str series: The series name (variant) of the reported media.
|
||||
:param int iteration: The iteration number.
|
||||
:param str local_path: A path to an media file.
|
||||
:param stream: BytesIO stream to upload. If provided, ``file_extension`` must also be provided.
|
||||
@ -904,6 +903,41 @@ class Logger(object):
|
||||
file_extension=file_extension,
|
||||
)
|
||||
|
||||
def report_plotly(
|
||||
self,
|
||||
title, # type: str
|
||||
series, # type: str
|
||||
iteration, # type: int
|
||||
figure, # type: Union[Dict, "Figure"]
|
||||
):
|
||||
"""
|
||||
Report a ``Plotly`` figure (plot) directly
|
||||
|
||||
``Plotly`` figure can be a ``plotly.graph_objs._figure.Figure`` or a dictionary as defined by ``plotly.js``
|
||||
|
||||
:param str title: The title (metric) of the plot.
|
||||
:param str series: The series name (variant) of the reported plot.
|
||||
:param int iteration: The iteration number.
|
||||
:param dict figure: A ``plotly`` Figure object or a ``poltly`` dictionary
|
||||
"""
|
||||
# if task was not started, we have to start it
|
||||
self._start_task_if_needed()
|
||||
|
||||
self._touch_title_series(title, series)
|
||||
|
||||
plot = figure if isinstance(figure, dict) else figure.to_plotly_json()
|
||||
# noinspection PyBroadException
|
||||
try:
|
||||
plot['layout']['title'] = series
|
||||
except Exception:
|
||||
pass
|
||||
self._task.reporter.report_plot(
|
||||
title=title,
|
||||
series=series,
|
||||
plot=plot,
|
||||
iter=iteration,
|
||||
)
|
||||
|
||||
def set_default_upload_destination(self, uri):
|
||||
# type: (str) -> None
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user