FigureWidget doesn't allow draggable polygon
Đang mở
Chưa có ai nhận issue này.
bug
P3
- Ngôn ngữ chính
- Python
- Star
- 18.8k
- Fork
- 2.8k
- Merge trung bình
- 16 giờ 26 phút
- Pull request đã merge (30 ngày)
- 21
Mô tả
Using the following minimal code I wasn't able to draw a closed path and then drag and drop the polygon. Check the full error code.
from plotly.graph_objs._figurewidget import FigureWidget
FigureWidget(
layout={
'modebar': {
"add": [
"drawclosedpath",
"eraseshape",
]
},
}
)
Full error code
ValueError Traceback (most recent call last)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/ipywidgets/widgets/widget.py:773, in Widget._handle_msg(self, msg)
771 if 'buffer_paths' in data:
772 _put_buffers(state, data['buffer_paths'], msg['buffers'])
--> 773 self.set_state(state)
775 # Handle a state request.
776 elif method == 'request_state':
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/ipywidgets/widgets/widget.py:650, in Widget.set_state(self, sync_data)
645 self._send(msg, buffers=echo_buffers)
647 # The order of these context managers is important. Properties must
648 # be locked when the hold_trait_notification context manager is
649 # released and notifications are fired.
--> 650 with self._lock_property(**sync_data), self.hold_trait_notifications():
651 for name in sync_data:
652 if name in self.keys:
File ~/micromamba/envs/streetsurface/lib/python3.10/contextlib.py:142, in _GeneratorContextManager.__exit__(self, typ, value, traceback)
140 if typ is None:
141 try:
--> 142 next(self.gen)
143 except StopIteration:
144 return False
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/traitlets/traitlets.py:1502, in HasTraits.hold_trait_notifications(self)
1500 for changes in cache.values():
1501 for change in changes:
-> 1502 self.notify_change(change)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/ipywidgets/widgets/widget.py:701, in Widget.notify_change(self, change)
698 if name in self.keys and self._should_send_property(name, getattr(self, name)):
699 # Send new state to front-end
700 self.send_state(key=name)
--> 701 super().notify_change(change)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/traitlets/traitlets.py:1517, in HasTraits.notify_change(self, change)
1515 def notify_change(self, change):
1516 """Notify observers of a change event"""
-> 1517 return self._notify_observers(change)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/traitlets/traitlets.py:1564, in HasTraits._notify_observers(self, event)
1561 elif isinstance(c, EventHandler) and c.name is not None:
1562 c = getattr(self, c.name)
-> 1564 c(event)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/plotly/basewidget.py:644, in BaseFigureWidget._handler_js2py_relayout(self, change)
640 relayout_data.pop("lastInputTime")
642 # Perform relayout
643 # ----------------
--> 644 self.plotly_relayout(relayout_data=relayout_data, source_view_id=source_view_id)
646 self._js2py_relayout = None
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/plotly/basedatatypes.py:2612, in BaseFigure.plotly_relayout(self, relayout_data, **kwargs)
2608 msg_kwargs = {}
2610 # Perform relayout operation on layout dict
2611 # -----------------------------------------
-> 2612 relayout_changes = self._perform_plotly_relayout(relayout_data)
2613 if relayout_changes:
2614 # The relayout operation resulted in a change to some layout
2615 # properties, so we dispatch change callbacks and send the
2616 # relayout message to the frontend (if any)
2617 self._send_relayout_msg(relayout_changes, **msg_kwargs)
File ~/micromamba/envs/streetsurface/lib/python3.10/site-packages/plotly/basedatatypes.py:2648, in BaseFigure._perform_plotly_relayout(self, relayout_data)
2644 for key_path_str, v in relayout_data.items():
2646 if not BaseFigure._is_key_path_compatible(key_path_str, self.layout):
-> 2648 raise ValueError(
2649 """
2650 Invalid property path '{key_path_str}' for layout
2651 """.format(
2652 key_path_str=key_path_str
2653 )
2654 )
2656 # Apply set operation on the layout dict
2657 val_changed = BaseFigure._set_in(self._layout, key_path_str, v)
ValueError:
Invalid property path 'shapes[0].path' for layout
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Bắt đầu bằng cách tái hiện ví dụ FigureWidget tối thiểu và lần theo BaseFigureWidget._handler_js2py_relayout đến BaseFigure._perform_plotly_relayout, nơi lỗi được phát sinh do property path không hợp lệ shapes[0].path. Kiểm tra cách drawclosedpath và thao tác kéo cập nhật các layout shapes, sau đó xác minh rằng việc vẽ và kéo một đa giác khép kín không còn phát sinh lỗi này.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- jupyter-notebook, python
- Lĩnh vực
- data-visualization
- Loại issue
- Lỗi
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100