Skip to content

Commit d5696af

Browse files
committed
extend functionality
1 parent 5c5469f commit d5696af

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed

plotly/widgets/graph_widget.py

Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -669,3 +669,105 @@ def reorder_traces(self, current_indices, new_indices=None):
669669
if new_indices is not None:
670670
message['newIndices'] = new_indices
671671
self._handle_outgoing_message(message)
672+
673+
def extend_traces(self, update, indices, max_points=None):
674+
""" Append data points to existing traces in the Plotly graph.
675+
676+
Args:
677+
update (dict):
678+
dict where keys are the graph attribute strings
679+
and values are arrays of arrays with values to extend.
680+
681+
Each array in the array will extend a trace.
682+
683+
Valid keys include:
684+
'x', 'y', 'text,
685+
'marker.color', 'marker.size', 'marker.symbol',
686+
'marker.line.color', 'marker.line.width'
687+
688+
indices (list, int):
689+
Specify which traces to apply the `update` dict to.
690+
If indices are not given, the update will apply to
691+
the traces in order.
692+
693+
max_points (int or dict, optional):
694+
If specified, then only show the `max_points` most
695+
recent points in the graph.
696+
This is useful to prevent traces from becoming too
697+
large (and slow) or for creating "windowed" graphs
698+
in monitoring applications.
699+
700+
To set max_points to different values for each trace
701+
or attribute, set max_points to a dict mapping keys
702+
to max_points values. See the examples below.
703+
704+
Examples:
705+
Initialization - Start each example below with this setup:
706+
```
707+
from plotly.widgets import Graph
708+
from IPython.display import display
709+
710+
graph = GraphWidget()
711+
graph.plot([
712+
{'x': [], 'y': []},
713+
{'x': [], 'y': []}
714+
])
715+
716+
display(graph)
717+
```
718+
719+
Example 1 - Extend the first trace with x and y data
720+
```
721+
graph.extend_traces({'x': [[1,2,3]], 'y': [[10,20,30]]}, [0])
722+
```
723+
724+
Example 2 - Extend the second trace with x and y data
725+
```
726+
graph.extend_traces({'x': [[1,2,3]], 'y': [[10,20,30]]}, [1])
727+
```
728+
729+
Example 3 - Extend the first two traces with x and y data
730+
```
731+
graph.extend_traces({
732+
'x': [[1,2,3], [2,3,4]],
733+
'y': [[10,20,30], [3,4,3]]
734+
}, [0, 1])
735+
```
736+
737+
Example 4 - Extend the first trace with x and y data and
738+
limit the length of data in that trace to 50
739+
points.
740+
```
741+
742+
graph.extend_traces({
743+
'x': [range(100)],
744+
'y': [range(100)]
745+
}, [0, 1], max_points=50)
746+
```
747+
748+
Example 5 - Extend the first and second trace with x and y data
749+
and limit the length of data in the first trace to
750+
25 points and the second trace to 50 points.
751+
```
752+
new_points = range(100)
753+
graph.extend_traces({
754+
'x': [new_points, new_points],
755+
'y': [new_points, new_points]
756+
},
757+
[0, 1],
758+
max_points={
759+
'x': [25, 50],
760+
'y': [25, 50]
761+
}
762+
)
763+
```
764+
"""
765+
message = {
766+
'task': 'extendTraces',
767+
'update': update,
768+
'graphId': self._graphId,
769+
'indices': indices
770+
}
771+
if max_points is not None:
772+
message['maxPoints'] = max_points
773+
self._handle_outgoing_message(message)

0 commit comments

Comments
 (0)