Python
import numpy as np
import plotly.graph_objs as go
from plotly.subplots import make_subplots
from plotly.offline import plot

# Создание данных для капусты (используем круг как упрощенный пример)
theta = np.linspace(0, 2*np.pi, 100)
x = 0.5 * np.cos(theta)
y = 0.5 * np.sin(theta)

# Создание кадров анимации
frames = []
for i in range(200):
    scale = 1 + 0.1 * np.sin(i * 0.1)
    new_x = scale * x
    new_y = scale * y
    frames.append(go.Frame(data=[go.Scatter(x=new_x, y=new_y, mode='lines')]))

# Начальные данные для графика
init_trace = go.Scatter(x=x, y=y, mode='lines')

# Создание фигуры с начальными данными и кадрами
fig = go.Figure(data=[init_trace], frames=frames)

# Настройка анимации
fig.update_layout(
    updatemenus=[{
        'buttons': [
            {
                'args': [None, {'frame': {'duration': 50, 'redraw': True}, 'fromcurrent': True}],
                'label': 'Play',
                'method': 'animate'
            },
            {
                'args': [[None], {'frame': {'duration': 0, 'redraw': False}, 'mode': 'immediate', 'transition': {'duration': 0}}],
                'label': 'Pause',
                'method': 'animate'
            }
        ],
        'showactive': False
    }]
)

# Настройка осей
fig.update_xaxes(range=[-1, 1])
fig.update_yaxes(range=[-1, 1])

# Отображение анимации
plot(fig)
temp-plot.html