Форум сайта python.su
У меня винда. Завести завела, но пользоваться им уже настроения не было)))
Офлайн
Скажите, пожалуйста, как можно контроллировать координатную плоскость в PyLab (MatPlotLib), а именно задавать диапазоны значений по осям и сетку?
Например, имеется следующий график.
Хотелось бы, чтобы ось ординат задавалась интервалом от 0 до 1.2, ось абсцисс - от 0 до 65 и вертикальные линии сетки были бы с единичным шагом.
Офлайн
Вышеприведенный график построен таким кодом:
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)
Офлайн
Я, по старой привычке, использую gnuplot. По-моему, к нему даже питоновская обертка есть.
Офлайн
Для изменения диапазонов по осям есть методы xlim и ylim. Шаг сетки никогда менять не приходилось, но есть методы xticks и yticks, может быть они помогут.
Отредактировано (Дек. 9, 2008 08:32:37)
Офлайн
balu, Jenyay, спасибо за ответы!
Jenyay, да, я смотрел функций dir() список методов в поисках чего-нибудь, что могло бы влиять на диапазоны построений. Методы get_xlim() и get_xticks() всегда возвращали единичный отрезок, оказалось ошибка была просто в моменте вызова! Функция построения графика plot() пересчитывает и меняет при необходимости эти значения, следовательно, все манипуляции с xlim и xticks необходимо просто производить после вызова plot(). :)
Кроме того, можно воспользоваться функцией set_xbound(). В моем случае также оказалась полезной.
Отредактировано (Дек. 9, 2008 13:50:40)
Офлайн
Таки удалось - курсовая работа выполнена! Спасибо всем, кто помогал совершать первые шаги! После сдачи вынесу код на суд общественности.
Офлайн
Так как всё-таки отрисовать график matplotlib в элемент Drawing Area размещенный на готовой форме сделанной в Glade? Пол дня мучаюсь.
Офлайн
BugzyСоздавать Drawing Area в Glade ненужно. Необходимо оставить пустую область (ячейку) в контейнере (VBox, HBox или Table/Grid), а в коде потом создавать объект и заполнять графиком. Вот пример:
Так как всё-таки отрисовать график matplotlib в элемент Drawing Area размещенный на готовой форме сделанной в Glade? Пол дня мучаюсь.
# Отрисовка функции
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 ('')
class App:
"""Основной интерфейс"""
# Constructor
def __init__ (self):
# Set the Glade file
self.gladefile = "../GUI/main.glade"
self.wTree = gtk.glade.XML (self.gladefile)
...
Офлайн
graphview.attach (canvas, 0, 3, 0, 1)Вот именно в этой строчке и происходит “внедрение” графика в форму окна. В качестве контейнера выступает таблица; при паковке в VBox/HBox я меня почему-то так и не получилось установить нужный порядок виджетов, поэтому пришлость использовать таблицу, размещая в ней объекты, как в HBox.
Офлайн