diff --git a/kivy_matplotlib_widget/__init__.py b/kivy_matplotlib_widget/__init__.py index 5223fdf..e629368 100644 --- a/kivy_matplotlib_widget/__init__.py +++ b/kivy_matplotlib_widget/__init__.py @@ -2,7 +2,6 @@ import kivy - kivy.require("2.3.0") path = os.path.dirname(__file__) @@ -11,6 +10,7 @@ fonts_path = os.path.join(path, f"fonts{os.sep}") """Path to fonts directory.""" from kivy.core.text import LabelBase + LabelBase.register(name="NavigationIcons",fn_regular= fonts_path + "NavigationIcons.ttf") import kivy_matplotlib_widget.factory_registers # NOQA diff --git a/kivy_matplotlib_widget/tools/clipboard_tool.py b/kivy_matplotlib_widget/tools/clipboard_tool.py index 0358f18..8f70a3b 100644 --- a/kivy_matplotlib_widget/tools/clipboard_tool.py +++ b/kivy_matplotlib_widget/tools/clipboard_tool.py @@ -12,8 +12,9 @@ So this tool will certaintly be removed or modified in the futur """ -from kivy.utils import platform from io import BytesIO + +from kivy.utils import platform from PIL import Image as PILImage if platform == 'win': @@ -29,10 +30,7 @@ """ Appkit come with pyobjc """ - from AppKit import ( - NSPasteboard, - NSPasteboardTypePNG, - ) + from AppKit import NSPasteboard, NSPasteboardTypePNG from Foundation import NSData diff --git a/kivy_matplotlib_widget/tools/cursors.py b/kivy_matplotlib_widget/tools/cursors.py index 4527099..0761b2c 100644 --- a/kivy_matplotlib_widget/tools/cursors.py +++ b/kivy_matplotlib_widget/tools/cursors.py @@ -5,10 +5,10 @@ https://github.com/anntzer/mplcursors """ -from collections.abc import Iterable -from contextlib import suppress import copy import weakref +from collections.abc import Iterable +from contextlib import suppress from weakref import WeakKeyDictionary import matplotlib as mpl @@ -18,6 +18,7 @@ import kivy_matplotlib_widget.tools.pick_info as pick_info + def _get_rounded_intersection_area(bbox_1, bbox_2): """Compute the intersection area between two bboxes rounded to 8 digits.""" # The rounding allows sorting areas without floating point issues. diff --git a/kivy_matplotlib_widget/tools/interactive_converter.py b/kivy_matplotlib_widget/tools/interactive_converter.py index fc4e242..77b65fd 100644 --- a/kivy_matplotlib_widget/tools/interactive_converter.py +++ b/kivy_matplotlib_widget/tools/interactive_converter.py @@ -1,21 +1,27 @@ from kivy.config import Config + Config.set('input', 'mouse', 'mouse,disable_on_activity') #avoid double-click on touch device Config.set('input', 'mouse', 'mouse,multitouch_on_demand') #disable red dot (user use mouse scroll for zooming) Config.set('kivy', 'keyboard_mode', '') #disable keyboard mode -from kivy.lang import Builder -from kivy.app import App -from kivy.properties import ColorProperty,NumericProperty,StringProperty,BooleanProperty -from kivy.metrics import dp -from kivy.core.window import Window +import multiprocessing as mp import matplotlib.pyplot as plt -import multiprocessing as mp +from kivy.app import App +from kivy.core.window import Window +from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ColorProperty, NumericProperty, + StringProperty) -from kivy_matplotlib_widget.uix.legend_widget import MatplotlibInteractiveLegend +from kivy_matplotlib_widget.uix.hover_widget import (BaseHoverFloatLayout, + PlotlyHover, + TagCompareHover, + add_hover) +from kivy_matplotlib_widget.uix.legend_widget import \ + MatplotlibInteractiveLegend from kivy_matplotlib_widget.uix.minmax_widget import add_minmax -from kivy_matplotlib_widget.uix.hover_widget import add_hover,BaseHoverFloatLayout,TagCompareHover,PlotlyHover KV = ''' Screen diff --git a/kivy_matplotlib_widget/tools/pick_info.py b/kivy_matplotlib_widget/tools/pick_info.py index 832cdc3..9e099e0 100644 --- a/kivy_matplotlib_widget/tools/pick_info.py +++ b/kivy_matplotlib_widget/tools/pick_info.py @@ -9,23 +9,24 @@ # have a `format_coord`-like method); PolyCollection (picking is not well # defined). -from collections import namedtuple -from contextlib import suppress import copy import functools import inspect -from inspect import Signature import itertools -from numbers import Integral import re import warnings +from collections import namedtuple +from contextlib import suppress +from inspect import Signature +from numbers import Integral from weakref import WeakSet +import numpy as np from matplotlib import cbook from matplotlib.axes import Axes from matplotlib.backend_bases import RendererBase -from matplotlib.collections import ( - LineCollection, PatchCollection, PathCollection) +from matplotlib.collections import (LineCollection, PatchCollection, + PathCollection) from matplotlib.container import BarContainer, ErrorbarContainer, StemContainer from matplotlib.figure import Figure from matplotlib.image import AxesImage @@ -34,7 +35,6 @@ from matplotlib.quiver import Barbs, Quiver from matplotlib.text import Text from matplotlib.transforms import Affine2D -import numpy as np def _register_scatter(): diff --git a/kivy_matplotlib_widget/uix/__init__.py b/kivy_matplotlib_widget/uix/__init__.py index f9577bb..d41e61d 100644 --- a/kivy_matplotlib_widget/uix/__init__.py +++ b/kivy_matplotlib_widget/uix/__init__.py @@ -1,3 +1,4 @@ #remove font_manager "debug" from matplotib import logging -logging.getLogger('matplotlib.font_manager').disabled = True \ No newline at end of file + +logging.getLogger('matplotlib.font_manager').disabled = True diff --git a/kivy_matplotlib_widget/uix/graph_subplot_widget.py b/kivy_matplotlib_widget/uix/graph_subplot_widget.py index 2441155..99ac617 100644 --- a/kivy_matplotlib_widget/uix/graph_subplot_widget.py +++ b/kivy_matplotlib_widget/uix/graph_subplot_widget.py @@ -1,25 +1,30 @@ """ Custom MatplotFigure """ -import math import copy +import math import time import matplotlib + matplotlib.use('Agg') -from kivy_matplotlib_widget.uix.graph_widget import _FigureCanvas ,MatplotFigure,MatplotlibEvent -from kivy.utils import get_color_from_hex -from matplotlib.colors import to_hex -from kivy.metrics import dp -from kivy_matplotlib_widget.tools.cursors import cursor -from kivy.properties import NumericProperty,BooleanProperty,OptionProperty -from kivy.graphics.texture import Texture import matplotlib.image as mimage import matplotlib.lines as mlines import matplotlib.patches as mpatches import matplotlib.transforms as mtransforms +from kivy.graphics.texture import Texture +from kivy.metrics import dp +from kivy.properties import BooleanProperty, NumericProperty, OptionProperty +from kivy.utils import get_color_from_hex +from matplotlib.colors import to_hex from matplotlib.container import BarContainer +from kivy_matplotlib_widget.tools.cursors import cursor +from kivy_matplotlib_widget.uix.graph_widget import (MatplotFigure, + MatplotlibEvent, + _FigureCanvas) + + def _iter_axes_subartists(ax): r"""Yield all child `Artist`\s (*not* `Container`\s) of *ax*.""" return ax.collections + ax.images + ax.lines + ax.texts + ax.patches diff --git a/kivy_matplotlib_widget/uix/graph_widget.py b/kivy_matplotlib_widget/uix/graph_widget.py index d7b75a8..f2b6094 100644 --- a/kivy_matplotlib_widget/uix/graph_widget.py +++ b/kivy_matplotlib_widget/uix/graph_widget.py @@ -2,34 +2,41 @@ and kivy scatter """ -import math import copy +import math import matplotlib + matplotlib.use('Agg') selector_widgets_available = False try: selector_widgets_available = True - from kivy_matplotlib_widget.uix.selector_widget import ResizeRelativeLayout,LassoRelativeLayout,EllipseRelativeLayout,SpanRelativeLayout + from kivy_matplotlib_widget.uix.selector_widget import ( + EllipseRelativeLayout, LassoRelativeLayout, ResizeRelativeLayout, + SpanRelativeLayout) except ImportError: print('Selector widgets are not available') +from weakref import WeakKeyDictionary + +import numpy as np +from kivy.clock import Clock +from kivy.core.window import Window from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, BoundedNumericProperty, AliasProperty, \ - NumericProperty, OptionProperty, DictProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, DictProperty, + ListProperty, NumericProperty, ObjectProperty, + OptionProperty) from kivy.uix.widget import Widget +from kivy.utils import get_color_from_hex from kivy.vector import Vector -from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib import cbook -from matplotlib.colors import to_hex from matplotlib.backend_bases import ResizeEvent -from weakref import WeakKeyDictionary -from kivy.metrics import dp -import numpy as np -from kivy.utils import get_color_from_hex -from kivy.core.window import Window -from kivy.clock import Clock +from matplotlib.backends.backend_agg import FigureCanvasAgg +from matplotlib.colors import to_hex + class MatplotlibEvent: x=None diff --git a/kivy_matplotlib_widget/uix/graph_widget_3d.py b/kivy_matplotlib_widget/uix/graph_widget_3d.py index f0090b0..18ed6a1 100644 --- a/kivy_matplotlib_widget/uix/graph_widget_3d.py +++ b/kivy_matplotlib_widget/uix/graph_widget_3d.py @@ -4,30 +4,33 @@ import math import matplotlib + matplotlib.use('Agg') +import time +from weakref import WeakKeyDictionary + +import numpy as np from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, BoundedNumericProperty, AliasProperty, \ - NumericProperty,StringProperty,ColorProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, ColorProperty, + ListProperty, NumericProperty, ObjectProperty, + StringProperty) from kivy.uix.boxlayout import BoxLayout +from kivy.uix.floatlayout import FloatLayout +from kivy.uix.scatter import Scatter +from kivy.uix.scatterlayout import ScatterLayout from kivy.vector import Vector +from matplotlib import cbook +from matplotlib.backend_bases import MouseEvent, ResizeEvent from matplotlib.backends.backend_agg import FigureCanvasAgg -from matplotlib.backend_bases import ResizeEvent -from matplotlib.backend_bases import MouseEvent from matplotlib.colors import to_hex -from kivy.metrics import dp -from kivy_matplotlib_widget.tools.cursors import cursor - -import numpy as np from mpl_toolkits import mplot3d -from weakref import WeakKeyDictionary -from matplotlib import cbook -from kivy.uix.scatter import Scatter -from kivy.uix.scatterlayout import ScatterLayout -from kivy.uix.floatlayout import FloatLayout -import time +from kivy_matplotlib_widget.tools.cursors import cursor + def line2d_seg_dist(p1, p2, p0): """distance(s) from line defined by p1 - p2 to point(s) p0 diff --git a/kivy_matplotlib_widget/uix/graph_widget_crop_factor.py b/kivy_matplotlib_widget/uix/graph_widget_crop_factor.py index ef7dc27..c450b96 100644 --- a/kivy_matplotlib_widget/uix/graph_widget_crop_factor.py +++ b/kivy_matplotlib_widget/uix/graph_widget_crop_factor.py @@ -3,26 +3,29 @@ 'MatplotFigureCropFactor', ) -import math import copy +import math import matplotlib + matplotlib.use('Agg') +from weakref import WeakKeyDictionary + +import numpy as np from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, AliasProperty, \ - NumericProperty, OptionProperty, BoundedNumericProperty, StringProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, ListProperty, + NumericProperty, ObjectProperty, OptionProperty, + StringProperty) from kivy.uix.widget import Widget from kivy.vector import Vector -from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib import cbook from matplotlib.backend_bases import ResizeEvent -from weakref import WeakKeyDictionary -from kivy.metrics import dp -import numpy as np - +from matplotlib.backends.backend_agg import FigureCanvasAgg class MatplotFigureCropFactor(Widget): diff --git a/kivy_matplotlib_widget/uix/graph_widget_general.py b/kivy_matplotlib_widget/uix/graph_widget_general.py index cda7f5c..99bae1d 100644 --- a/kivy_matplotlib_widget/uix/graph_widget_general.py +++ b/kivy_matplotlib_widget/uix/graph_widget_general.py @@ -2,25 +2,27 @@ and kivy scatter """ -import math import copy +import math import matplotlib + matplotlib.use('Agg') +import numpy as np +from kivy.base import EventLoop from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, BoundedNumericProperty, AliasProperty, \ - NumericProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, ListProperty, + NumericProperty, ObjectProperty) from kivy.uix.widget import Widget from kivy.vector import Vector +from matplotlib.backend_bases import MouseEvent, ResizeEvent from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib.transforms import Bbox -from matplotlib.backend_bases import ResizeEvent -from matplotlib.backend_bases import MouseEvent -from kivy.metrics import dp -import numpy as np -from kivy.base import EventLoop + class MatplotFigureGeneral(Widget): """Widget to show a matplotlib figure in kivy. diff --git a/kivy_matplotlib_widget/uix/graph_widget_scatter.py b/kivy_matplotlib_widget/uix/graph_widget_scatter.py index fc4dd2c..14355a8 100644 --- a/kivy_matplotlib_widget/uix/graph_widget_scatter.py +++ b/kivy_matplotlib_widget/uix/graph_widget_scatter.py @@ -2,38 +2,44 @@ and kivy scatter """ -import math import copy +import math import matplotlib + matplotlib.use('Agg') selector_widgets_available = False try: selector_widgets_available = True - from kivy_matplotlib_widget.uix.selector_widget import ResizeRelativeLayout,LassoRelativeLayout,EllipseRelativeLayout,SpanRelativeLayout + from kivy_matplotlib_widget.uix.selector_widget import ( + EllipseRelativeLayout, LassoRelativeLayout, ResizeRelativeLayout, + SpanRelativeLayout) except ImportError: print('Selector widgets are not available') +from weakref import WeakKeyDictionary + +import matplotlib.image as mimage +import matplotlib.lines as mlines +import matplotlib.patches as mpatches +import matplotlib.transforms as mtransforms +import numpy as np +from kivy.clock import Clock +from kivy.core.window import Window from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, BoundedNumericProperty, AliasProperty, \ - NumericProperty, OptionProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, ListProperty, + NumericProperty, ObjectProperty, OptionProperty) from kivy.uix.widget import Widget +from kivy.utils import get_color_from_hex from kivy.vector import Vector -from matplotlib.colors import to_hex -from matplotlib.backends.backend_agg import FigureCanvasAgg from matplotlib import cbook from matplotlib.backend_bases import ResizeEvent -from weakref import WeakKeyDictionary -from kivy.metrics import dp -import numpy as np -from kivy.utils import get_color_from_hex -import matplotlib.image as mimage -import matplotlib.lines as mlines -import matplotlib.patches as mpatches -import matplotlib.transforms as mtransforms -from kivy.core.window import Window -from kivy.clock import Clock +from matplotlib.backends.backend_agg import FigureCanvasAgg +from matplotlib.colors import to_hex + class MatplotFigureScatter(Widget): """Widget to show a matplotlib figure in kivy. diff --git a/kivy_matplotlib_widget/uix/graph_widget_twinx.py b/kivy_matplotlib_widget/uix/graph_widget_twinx.py index 287c6c5..35b1099 100644 --- a/kivy_matplotlib_widget/uix/graph_widget_twinx.py +++ b/kivy_matplotlib_widget/uix/graph_widget_twinx.py @@ -2,35 +2,42 @@ and kivy scatter """ -import math import copy +import math import matplotlib + matplotlib.use('Agg') selector_widgets_available = False try: selector_widgets_available = True - from kivy_matplotlib_widget.uix.selector_widget import ResizeRelativeLayout,LassoRelativeLayout,EllipseRelativeLayout,SpanRelativeLayout + from kivy_matplotlib_widget.uix.selector_widget import ( + EllipseRelativeLayout, LassoRelativeLayout, ResizeRelativeLayout, + SpanRelativeLayout) except ImportError: print('Selector widgets are not available') +from weakref import WeakKeyDictionary + +import matplotlib.lines as mlines +import numpy as np +from kivy.clock import Clock +from kivy.core.window import Window from kivy.graphics.texture import Texture from kivy.graphics.transformation import Matrix from kivy.lang import Builder -from kivy.properties import ObjectProperty, ListProperty, BooleanProperty, BoundedNumericProperty, AliasProperty, \ - NumericProperty, OptionProperty, DictProperty +from kivy.metrics import dp +from kivy.properties import (AliasProperty, BooleanProperty, + BoundedNumericProperty, DictProperty, + ListProperty, NumericProperty, ObjectProperty, + OptionProperty) from kivy.uix.widget import Widget +from kivy.utils import get_color_from_hex from kivy.vector import Vector -from matplotlib.backends.backend_agg import FigureCanvasAgg -from matplotlib.colors import to_hex from matplotlib import cbook -import matplotlib.lines as mlines -from weakref import WeakKeyDictionary from matplotlib.backend_bases import ResizeEvent -from kivy.metrics import dp -import numpy as np -from kivy.utils import get_color_from_hex -from kivy.core.window import Window -from kivy.clock import Clock +from matplotlib.backends.backend_agg import FigureCanvasAgg +from matplotlib.colors import to_hex + class MatplotlibEvent: x=None diff --git a/kivy_matplotlib_widget/uix/hover_widget.py b/kivy_matplotlib_widget/uix/hover_widget.py index 97ff97c..55acf54 100644 --- a/kivy_matplotlib_widget/uix/hover_widget.py +++ b/kivy_matplotlib_widget/uix/hover_widget.py @@ -1,20 +1,13 @@ -from kivy.uix.floatlayout import FloatLayout +import numpy as np +from kivy.core.window import Window +from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ColorProperty, NumericProperty, + ObjectProperty, OptionProperty, StringProperty) from kivy.uix.boxlayout import BoxLayout +from kivy.uix.floatlayout import FloatLayout -from kivy.properties import ( - ObjectProperty, - OptionProperty, - NumericProperty, - StringProperty, - BooleanProperty, - ColorProperty - ) -from kivy.lang import Builder -from kivy.core.window import Window -from kivy.metrics import dp -import numpy as np - def add_hover(figure_wgt,mode='touch',label_x='x',label_y='y',hover_widget=None,hover_type='nearest'): """ add hover to matpotlib figure diff --git a/kivy_matplotlib_widget/uix/legend_widget.py b/kivy_matplotlib_widget/uix/legend_widget.py index e421adf..d865bc3 100644 --- a/kivy_matplotlib_widget/uix/legend_widget.py +++ b/kivy_matplotlib_widget/uix/legend_widget.py @@ -1,29 +1,21 @@ -from kivy.uix.boxlayout import BoxLayout -from kivy.uix.floatlayout import FloatLayout -from kivy.utils import get_color_from_hex -from kivy.clock import Clock -from kivy.config import Config -from kivy.utils import platform +import copy +import re from functools import partial +from math import ceil -from kivy.properties import ( - StringProperty, - ObjectProperty, - NumericProperty, - ListProperty, - BooleanProperty, - ColorProperty - ) - +import matplotlib as mpl +import numpy as np +from kivy.clock import Clock +from kivy.config import Config from kivy.lang import Builder -from kivy.uix.widget import Widget from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ColorProperty, ListProperty, + NumericProperty, ObjectProperty, StringProperty) +from kivy.uix.boxlayout import BoxLayout +from kivy.uix.floatlayout import FloatLayout +from kivy.uix.widget import Widget +from kivy.utils import get_color_from_hex, platform from matplotlib.colors import to_hex -import matplotlib as mpl -from math import ceil -import numpy as np -import copy -import re class LegendGestures(Widget): diff --git a/kivy_matplotlib_widget/uix/minmax_widget.py b/kivy_matplotlib_widget/uix/minmax_widget.py index da05f6a..8ff05a8 100644 --- a/kivy_matplotlib_widget/uix/minmax_widget.py +++ b/kivy_matplotlib_widget/uix/minmax_widget.py @@ -1,21 +1,13 @@ +from kivy.clock import Clock +from kivy.core import text as coretext +from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ColorProperty, DictProperty, + NumericProperty, ObjectProperty, StringProperty) from kivy.uix.floatlayout import FloatLayout from kivy.uix.textinput import TextInput -from kivy.properties import ( - ObjectProperty, - NumericProperty, - StringProperty, - BooleanProperty, - ColorProperty, - DictProperty - ) - -from kivy.lang import Builder -from kivy.metrics import dp -from kivy.clock import Clock -from kivy.core import text as coretext - def add_minmax(figure_wgt, xaxis_formatter = None, invert_xaxis_formatter = None, diff --git a/kivy_matplotlib_widget/uix/navigation_bar_widget.py b/kivy_matplotlib_widget/uix/navigation_bar_widget.py index 5cb7247..d4d5b0b 100644 --- a/kivy_matplotlib_widget/uix/navigation_bar_widget.py +++ b/kivy_matplotlib_widget/uix/navigation_bar_widget.py @@ -1,13 +1,16 @@ -from matplotlib.backend_bases import NavigationToolbar2 -from kivy.properties import ObjectProperty, OptionProperty,ListProperty,BooleanProperty,NumericProperty,StringProperty +from kivy.clock import Clock +from kivy.core.window import Window +from kivy.factory import Factory from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ListProperty, NumericProperty, + ObjectProperty, OptionProperty, StringProperty) from kivy.uix.boxlayout import BoxLayout from kivy.uix.relativelayout import RelativeLayout -from kivy.clock import Clock -from kivy.factory import Factory +from matplotlib.backend_bases import NavigationToolbar2 + from kivy_matplotlib_widget.uix.hover_widget import add_hover -from kivy.core.window import Window -from kivy.metrics import dp + class MatplotNavToolbar(BoxLayout): diff --git a/kivy_matplotlib_widget/uix/selector_widget.py b/kivy_matplotlib_widget/uix/selector_widget.py index 46f1f2e..52f9348 100644 --- a/kivy_matplotlib_widget/uix/selector_widget.py +++ b/kivy_matplotlib_widget/uix/selector_widget.py @@ -1,32 +1,25 @@ -from kivy.lang import Builder -from kivy.uix.relativelayout import RelativeLayout -from kivy.uix.floatlayout import FloatLayout -from kivy.properties import (ColorProperty, - ObjectProperty, - OptionProperty, - BooleanProperty, - ListProperty, - NumericProperty) -from kivy.metrics import dp -from kivy.core.window import Window -from kivy.utils import platform - -import numpy as np -from matplotlib.path import Path -from matplotlib.patches import Ellipse as Ellipse_mpl -import matplotlib.colors as mcolors - +import copy from functools import partial -from math import cos, sin, atan2, pi +from math import atan2, cos, pi, sin from typing import List, Optional +import matplotlib.colors as mcolors +import numpy as np from kivy.clock import Clock -from kivy.graphics import Ellipse, Line, Color, Point, Mesh, PushMatrix, \ - PopMatrix, Rotate, InstructionGroup -from kivy.graphics.tesselator import Tesselator +from kivy.core.window import Window from kivy.event import EventDispatcher -import copy - +from kivy.graphics import (Color, Ellipse, InstructionGroup, Line, Mesh, Point, + PopMatrix, PushMatrix, Rotate) +from kivy.graphics.tesselator import Tesselator +from kivy.lang import Builder +from kivy.metrics import dp +from kivy.properties import (BooleanProperty, ColorProperty, ListProperty, + NumericProperty, ObjectProperty, OptionProperty) +from kivy.uix.floatlayout import FloatLayout +from kivy.uix.relativelayout import RelativeLayout +from kivy.utils import platform +from matplotlib.patches import Ellipse as Ellipse_mpl +from matplotlib.path import Path kv = ''' :