Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2015 18:01:28

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

Столкнулся со следующей проблемой, есть такой код(не мной написанный). Не могу разобраться с функцией анимации, а точнее с тем как именно задать анимацию по нужным мне координатам. Сейчас анимация двигает три точки по прямым я хочу что бы они двигались по массиву координат заранее созданому, как мне это реализовать?

#!/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()

Отредактировано last_meloman (Май 21, 2015 20:20:29)

Офлайн

#2 Май 21, 2015 19:34:12

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

правильно вставьте код



————————————————
-*- Simple is better than complex -*-

Офлайн

#3 Май 21, 2015 20:20:57

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

Исправил

Офлайн

#4 Май 21, 2015 20:39:49

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

ну вот к примеру

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 замечательная документация, вот прочтите и все вопросы отпадут



————————————————
-*- Simple is better than complex -*-

Офлайн

#5 Май 21, 2015 21:08:26

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

Благодарю

Офлайн

#6 Май 22, 2015 12:19:09

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

Еще раз извиняюсь, но я немного не понимаю вас, вчера с телефона всё проверял, а вот сейчас попытался реализваоть то что вы мне дали, во первых я писал что мне нужен код под python 3, оператор next не работает в этой версии, во вторых если уж я использую matplotlib то пытался наверное разобраться и пошёл на форму потому что остались вопромы к документации. если вас не затруднит ответьте: чем можно заменить next что бы в 3 ий версии питона работал данный код + следующий вопрос, а если я хочу закинуть туда вот такой массив

Mercury[i][0] = merc_x0/ae # координаты x 
Mercury[i][2] = merc_y0/ae # координаты y

Отредактировано last_meloman (Май 22, 2015 12:26:33)

Офлайн

#7 Май 22, 2015 14:17:05

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

last_meloman
под python 3, оператор next не работает в этой версии
да, извините, забыл что нужно на третий
но в третем есть __next__
и гугл не держит это в секрете
scat.set_offsets((a.__next__()))
last_meloman
если я хочу закинуть туда вот такой массив
не понял
весь код создания массива покажите



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Май 22, 2015 14:33:03

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

там идет большое количество предрасчетов и нужно по этим предрасчетам проанимировать точку

[Mercury[i][0] for i in range(N)]
[Mercury[i][2] for i in range(N)]
есть 2 вот таких списка ее координат

Отредактировано last_meloman (Май 22, 2015 14:41:17)

Офлайн

#9 Май 22, 2015 19:59:38

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

вы уже такое спрашиваете…

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__()))
читайте книгу!



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Май 22, 2015 22:06:08

last_meloman
Зарегистрирован: 2015-05-21
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Движение точек в python 3 с использованием matplotlib

Так отлично, а если рисовать и другие планеты, их координаты храняться в таких же масивах, как тогда оформить update_plot? Можно ли в этот же закинуть их ? Или надо новые созадвать? Продемостритруйте как

Отредактировано last_meloman (Май 22, 2015 22:06:39)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version