Найти - Пользователи
Полная версия: Построение графиков
Начало » GUI » Построение графиков
1 2 3
proDiva
У меня винда. Завести завела, но пользоваться им уже настроения не было)))
Decoy
Скажите, пожалуйста, как можно контроллировать координатную плоскость в PyLab (MatPlotLib), а именно задавать диапазоны значений по осям и сетку?

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



Хотелось бы, чтобы ось ординат задавалась интервалом от 0 до 1.2, ось абсцисс - от 0 до 65 и вертикальные линии сетки были бы с единичным шагом.
Decoy
Вышеприведенный график построен таким кодом:
        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)
Изменить сами массивы данных нельзя.
balu
Я, по старой привычке, использую gnuplot. По-моему, к нему даже питоновская обертка есть.
Jenyay
Для изменения диапазонов по осям есть методы xlim и ylim. Шаг сетки никогда менять не приходилось, но есть методы xticks и yticks, может быть они помогут.
Decoy
balu, Jenyay, спасибо за ответы!

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

Кроме того, можно воспользоваться функцией set_xbound(). В моем случае также оказалась полезной.
Decoy
Таки удалось - курсовая работа выполнена! Спасибо всем, кто помогал совершать первые шаги! После сдачи вынесу код на суд общественности.
Bugzy
Так как всё-таки отрисовать график matplotlib в элемент Drawing Area размещенный на готовой форме сделанной в Glade? Пол дня мучаюсь.
Decoy
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)

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