Форум сайта python.su
Использую matplotlib для построения графиков в полярной системе координат. Нужно отобразить спутники навигационные на небосводе, по двух параметрам высота над горизонтом и азимут.
Требуется раз в секунду перерисовывать две точки на круге (в полярной системе)
Как это можно реализовать? Как то в функции которая срабатывает по таймеру нада поменять координаты точек и перерисовать график?
import time
import numpy as np
import matplotlib
import sys
matplotlib.use('WXAgg') # do this before importing pylab
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111,polar=True,axisbg='#d5de9c')
r = (45,60)
degree = (95,180)
theta = ((degree*np.pi/180.0),(degree*np.pi/180.0))
ax.set_title(“View”, fontsize=20)
line = ax.plot(theta, r, ‘bo’, markersize=15)
ax.set_rmax(90.0)
#
def update_line(event):
#нужно вставить как мне кажется новые координаты угол и радиус в полярной системе
fig.canvas.draw()
print ‘Hello’
import wx
id = wx.NewId()
actor = fig.canvas.manager.frame
timer = wx.Timer(actor, id=id)
timer.Start(100)
wx.EVT_TIMER(actor, id, update_line)
plt.show()
Офлайн
Vad
Ты поставил конкретную задачу. Я думаю эти ссылки тебе помогут
http://www.scipy.org/PyLab
http://www.scipy.org/Plotting_Tutorial
Офлайн
Хотя и это может не помочь.
Офлайн
Вот кое что нашёл http://forum.hs.dp.ua/forums/archive/index.php/t-4549.html
Офлайн
Стас, причем здесь последняя ссылка вообще? Ты суть вопроса понял? Если нет, то зачем что то писать вообще?
Офлайн
Согласен частично с igor….
мне нужен совет людей которые использовали matplolib и могут дать конкретные реализации динамической перерисовки графиков…
В примерах на библиотеку есть анимированная синусоида…не могу разобратся как мне переложить этот пример на полярную систему …..чтобы когда уже есть figure обновлять на ней данные…..
Отредактировано (Апрель 4, 2009 18:37:18)
Офлайн
Я конечно писал на pylab. Но такой задачи себе не ставил.
Если хочешь могу показать тебе примерчик
Отредактировано (Апрель 4, 2009 19:05:52)
Офлайн
Можно посмотреть….
Меня интересует как перерисовать график в уже открытом окне figure
Офлайн
День добрый, на днях я делал похожую задачу, правда не в полярных координатах, если интересно можете глянуть.(код конечно не идеален, критика принимается)
# -*- coding: cp1251 -*-
import pylab
import os, time
def open_file():
try:
f = open( 'meteo_kks.txt', 'r')
f_r = f.readlines()
f.close()
except:
pass
return f_r
def date_plot(f, n, a):
'''f - f_r,
n - number sting'''
#print a
i = a[0]
a.remove(i)
f = f[n][:-1]
f = f.replace(',','.')
a.append(float(f))
return a
def x_up(a):
'''f - f_r,
n - number sting'''
i = a[0]
a.remove(i)
j = len(a)
x = a[j-1] + 1
a.append(x)
return a
def zapolnenie(n):
s = []
for i in range(n):
s.append(0.0)
return s
t = []
p = []
w = []
x = []
pylab.ion()
while 1:
#pylab.ion()
#print 'zzz'
f_r = open_file()
if t == []:
t = zapolnenie(50)
if p == []:
p = zapolnenie(50)
if w == []:
w = zapolnenie(50)
if x == []:
x = range(50)
fig = pylab.figure(0,)
#fig.clear()
ax1 = pylab.subplot(3,1,1)#h,l,pos
t = date_plot(f_r, 3, t)
x = x_up(x)
line, = pylab.plot(x, t, '-r')
line.set_ydata(t)
pylab.grid(True)
ax2 = pylab.subplot(3,1,2)#h,l,pos
#ax2.set_ylim(700, 800)
p = date_plot(f_r, 4, p)
line, = ax2.plot(x, p, '-g')
line.set_ydata(p)
pylab.grid(True)
ax3 = pylab.subplot(3,1,3)#h,l,pos
w = date_plot(f_r, 5, w)
line, = pylab.plot(x, w, '-b')
line.set_ydata(w)
pylab.grid(True)
pylab.draw()
time.sleep(1)
Офлайн
Да с линией тоже разобрался в примере хорошо работает
А именно в полярных координатах не знаю как поменять текущие значение на новое…
какой то аналог функции нужен set_ydata() или наподобие этого…
Офлайн