Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 27, 2008 08:58:08

proDiva
От:
Зарегистрирован: 2007-02-15
Сообщения: 244
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

У меня винда. Завести завела, но пользоваться им уже настроения не было)))



Офлайн

#2 Дек. 8, 2008 22:08:19

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Скажите, пожалуйста, как можно контроллировать координатную плоскость в PyLab (MatPlotLib), а именно задавать диапазоны значений по осям и сетку?

Например, имеется следующий график.



Хотелось бы, чтобы ось ординат задавалась интервалом от 0 до 1.2, ось абсцисс - от 0 до 65 и вертикальные линии сетки были бы с единичным шагом.



Офлайн

#3 Дек. 8, 2008 22:11:22

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Вышеприведенный график построен таким кодом:

        self.figure = Figure ()
self.axis = self.figure.add_subplot (111)
self.axis.set_title ('F = th (t)')
self.axis.grid (True)
self.canvas = FigureCanvas (self.figure) # Drawing Area
self.canvas.set_size_request (640, 480)
self.canvas.show ()

k = 30.0 / 65.0
t = range (65)
F = range (65)
for i in range (5):
for j in range (13):
F[13*i+j] = tanh (t[j]*k)
print F
self.axis.plot (t, F)
Изменить сами массивы данных нельзя.



Офлайн

#4 Дек. 9, 2008 08:21:59

balu
От:
Зарегистрирован: 2006-05-24
Сообщения: 521
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Я, по старой привычке, использую gnuplot. По-моему, к нему даже питоновская обертка есть.



Офлайн

#5 Дек. 9, 2008 08:32:23

Jenyay
От:
Зарегистрирован: 2007-08-10
Сообщения: 173
Репутация: +  1  -
Профиль   Отправить e-mail  

Построение графиков

Для изменения диапазонов по осям есть методы xlim и ylim. Шаг сетки никогда менять не приходилось, но есть методы xticks и yticks, может быть они помогут.



Отредактировано (Дек. 9, 2008 08:32:37)

Офлайн

#6 Дек. 9, 2008 13:42:52

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

balu, Jenyay, спасибо за ответы!

Jenyay, да, я смотрел функций dir() список методов в поисках чего-нибудь, что могло бы влиять на диапазоны построений. Методы get_xlim() и get_xticks() всегда возвращали единичный отрезок, оказалось ошибка была просто в моменте вызова! Функция построения графика plot() пересчитывает и меняет при необходимости эти значения, следовательно, все манипуляции с xlim и xticks необходимо просто производить после вызова plot(). :)

Кроме того, можно воспользоваться функцией set_xbound(). В моем случае также оказалась полезной.



Отредактировано (Дек. 9, 2008 13:50:40)

Офлайн

#7 Дек. 21, 2008 15:50:02

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Таки удалось - курсовая работа выполнена! Спасибо всем, кто помогал совершать первые шаги! После сдачи вынесу код на суд общественности.



Офлайн

#8 Янв. 13, 2009 11:53:19

Bugzy
От:
Зарегистрирован: 2009-01-13
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Так как всё-таки отрисовать график matplotlib в элемент Drawing Area размещенный на готовой форме сделанной в Glade? Пол дня мучаюсь.



Офлайн

#9 Янв. 13, 2009 20:52:47

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

Bugzy
Так как всё-таки отрисовать график matplotlib в элемент Drawing Area размещенный на готовой форме сделанной в Glade? Пол дня мучаюсь.
Создавать Drawing Area в Glade ненужно. Необходимо оставить пустую область (ячейку) в контейнере (VBox, HBox или Table/Grid), а в коде потом создавать объект и заполнять графиком. Вот пример:
# Отрисовка функции
def draw_fun ():
fun = Figure ()
fun.set_facecolor ('#edeceb')
ax = fun.add_subplot (111)
ax.set_title ('F = th (t)')
ax.grid (True)
canvas = FigureCanvas (fun) # DrawingArea
canvas.set_size_request (1440, 240)
canvas.show ()
graphview = main.wTree.get_widget ("table1")
graphview.attach (canvas, 0, 3, 0, 1)
ax.plot (main.t, main.F, 'r')
ax.step (main.x, main.Xchange, where='post')
ax.set_xbound (lower=0, upper=64)
ax.set_ybound (lower=0, upper=1.05)
ax.set_xlim (xmin=0, xmax=64)
ax.set_xticklabels ('')
main - экземпляр класса App, например.
class App:

"""Основной интерфейс"""

# Constructor
def __init__ (self):

# Set the Glade file
self.gladefile = "../GUI/main.glade"
self.wTree = gtk.glade.XML (self.gladefile)

...



Офлайн

#10 Янв. 13, 2009 21:07:15

Decoy
От:
Зарегистрирован: 2006-04-06
Сообщения: 44
Репутация: +  0  -
Профиль   Отправить e-mail  

Построение графиков

graphview.attach (canvas, 0, 3, 0, 1)
Вот именно в этой строчке и происходит “внедрение” графика в форму окна. В качестве контейнера выступает таблица; при паковке в VBox/HBox я меня почему-то так и не получилось установить нужный порядок виджетов, поэтому пришлость использовать таблицу, размещая в ней объекты, как в HBox.
Блок кода который я привел - это реальный кусочек из моей работающей программы, поэтому содержит несколько неважных в данном контексте строк различного рода инициализаций и настроек области построения (методы *.set_*).



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version