Найти - Пользователи
Полная версия: Движение точек в python 3 с использованием matplotlib
Начало » Python для новичков » Движение точек в python 3 с использованием matplotlib
1 2
last_meloman
Столкнулся со следующей проблемой, есть такой код(не мной написанный). Не могу разобраться с функцией анимации, а точнее с тем как именно задать анимацию по нужным мне координатам. Сейчас анимация двигает три точки по прямым я хочу что бы они двигались по массиву координат заранее созданому, как мне это реализовать?

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
def _update_plot(j, fig, scat): # от куда беруться значения переменной j
    scat.set_offsets(([0,j], [j,50], [j,j]))
    return scat
fig = plt.figure()
x = [ ]
y = [ ]
ax = fig.add_subplot(111)
ax.grid(True, linestyle = '-', color = '0.75')
ax.set_xlim([-50, 200])
ax.set_ylim([-50, 200])
scat = plt.scatter(x, y, c = x)
scat.set_alpha(0.8) # зачем нужен этот альфа?
anim = animation.FuncAnimation(fig, _update_plot, fargs = (fig, scat),
                               frames = 100, interval = 20)
plt.show()
terabayt
правильно вставьте код
last_meloman
Исправил
terabayt
ну вот к примеру
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
a = iter([[0,0], [10, 20], [10, 10], [0, 0], [100, 0], [100, 50], [50, 50], [0, 0]])
def _update_plot(j, fig, scat):
    scat.set_offsets((a.next()))
    return scat
fig = plt.figure()
x = [ ]
y = [ ]
ax = fig.add_subplot(111)
ax.grid(True, linestyle = '-', color = '0.75')
ax.set_xlim([-50, 200])
ax.set_ylim([-50, 200])
scat = plt.scatter(x, y, c = x)
anim = animation.FuncAnimation(fig, _update_plot, fargs = (fig, scat),
                               frames = 100, interval = 200)
plt.show()
scat.set_alpha(0.8) # зачем нужен этот альфа?
прозрачность
почитайте о альфа каналах
def _update_plot(j, fig, scat): # от куда беруться значения переменной j
в matplotlib замечательная документация, вот прочтите и все вопросы отпадут
last_meloman
Благодарю
last_meloman
Еще раз извиняюсь, но я немного не понимаю вас, вчера с телефона всё проверял, а вот сейчас попытался реализваоть то что вы мне дали, во первых я писал что мне нужен код под python 3, оператор next не работает в этой версии, во вторых если уж я использую matplotlib то пытался наверное разобраться и пошёл на форму потому что остались вопромы к документации. если вас не затруднит ответьте: чем можно заменить next что бы в 3 ий версии питона работал данный код + следующий вопрос, а если я хочу закинуть туда вот такой массив
Mercury[i][0] = merc_x0/ae # координаты x 
Mercury[i][2] = merc_y0/ae # координаты y
terabayt
last_meloman
под python 3, оператор next не работает в этой версии
да, извините, забыл что нужно на третий
но в третем есть __next__
и гугл не держит это в секрете
scat.set_offsets((a.__next__()))
last_meloman
если я хочу закинуть туда вот такой массив
не понял
весь код создания массива покажите
last_meloman
там идет большое количество предрасчетов и нужно по этим предрасчетам проанимировать точку
[Mercury[i][0] for i in range(N)]
[Mercury[i][2] for i in range(N)]
есть 2 вот таких списка ее координат
terabayt
вы уже такое спрашиваете…
Mercury = [[1,2,30], [4,5,15], [17,8,9], [10,11,12], [13,14,5]]
Mx = iter(Mercury[i][0] for i in range(5))
My = iter(Mercury[i][2] for i in range(5))
def _update_plot(j, fig, scat):
    scat.set_offsets((Mx.__next__(), My.__next__()))
читайте книгу!
last_meloman
Так отлично, а если рисовать и другие планеты, их координаты храняться в таких же масивах, как тогда оформить update_plot? Можно ли в этот же закинуть их ? Или надо новые созадвать? Продемостритруйте как
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB