Найти - Пользователи
Полная версия: Mathplot и как вариант
Начало » Python для новичков » Mathplot и как вариант
1
Mazay_Ka
Привет, подскажите что можно сделать.
Есть допустить словарь(dict) у каждого ключа список значений например
у какждого ключа свой список.
Как можно реализовать чтобы допустим был график а над ним список где я могу выбрать каждый ключ из словаря а по значениям этого ключа рисовался график.
Я знаком только с mathplot по части рисования графиком, но как такое сделать там пока не понял, получается только нарисовать много графиков по всем значениям или на одном графике или на разных, а вот как взять так чтобы можно было выбирать и получать гафик в зависимости от выбора я пока не понял.
Подскажи те может на простом примере или хоть куда смотреть в какую сторону.
Спасибо.
Я так понимаю стоит веб приложение написать простейшее где наделать ссылок на каждый ключ и при клике загружать страницу где по значению данного ключа будет график. Это так мысли.
terabayt
ну вот посмотрите я накидал прмер
import matplotlib
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import Tkinter as Tk
root = Tk.Tk()
root.wm_title("TEST")
f = Figure()
a = f.add_subplot(111)
d = [0.0,3.0,0.01]
canvas = FigureCanvasTkAgg(f, master=root)
def redraw():
    func([float(i.get()) for i in e])
def func(array):
    t = arange(*array)
    s = sin(2*pi*t)
    a.clear()
    a.plot(t,s)
    canvas.draw()
func(d)
e = []
for j, i in enumerate(d):
    e.append(Tk.Entry(root))
    e[-1].insert(0, str(d[j]))
    e[-1].pack(side=Tk.TOP)
b = Tk.Button(root, text='Ok', command=redraw)
b.pack(side=Tk.TOP)
canvas.get_tk_widget().pack(side=Tk.BOTTOM, fill=Tk.BOTH, expand=1)
Tk.mainloop()
JOHN_16
получаете от сервера массив json с данными и отрисовываете на JS апликации график. это типичное решение на сегодняшний день - переносить логику на стороне клиента. Я так делал. Работает хорошо. если данные большие то можно через AJAX получать одиночные серии и отрисовывать
Mazay_Ka
terabayt
ну вот посмотрите я накидал прмер
Спасибо, такой момент у меня больше 50 значений такого плана все разные, это можно в mathplot как выпадающим списком реализовать, то есть выбрать нужный ключ из списка и по его значениям получаем график, просто значение по у, по х их наименования. Данные получаю из базы как вариант их может быть и больше по этому вариант со списком здесь наверно самый практичный

JOHN_16
отрисовываете на JS апликации график
к сожалению я пока с js не так хорошо знаком думал mathplot обойтись

Спасибо всем за советы и помощь.
terabayt
import matplotlib
matplotlib.use('TkAgg')
from numpy import arange, sin, pi
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
import Tkinter as Tk
root = Tk.Tk()
root.wm_title("TEST")
f = Figure()
a = f.add_subplot(111)
my_dict = {'a': [0.0,3.0,0.01], 'b': [0.0,5.0,0.1], 'c': [1.0,3.0,0.5]}  # ваш словарь
d = [0.0,3.0,0.01]
canvas = FigureCanvasTkAgg(f, master=root)
def redraw(a):
    func(my_dict[variable.get()])
def func(array):
    t = arange(*array)
    s = sin(2*pi*t)
    a.clear()
    a.plot(t,s)
    canvas.draw()
func(d)
variable = Tk.StringVar(root)
variable.set("Hello")
opt = Tk.OptionMenu(root, variable, *my_dict, command=redraw)
opt.pack(side=Tk.TOP)
canvas.get_tk_widget().pack(side=Tk.BOTTOM, fill=Tk.BOTH, expand=1)
Tk.mainloop()
Mazay_Ka
terabayt
Спасибо вы очень помогли, это то то нужно.
Делаю сейчас вариант с pygal и flask чтобы можно было на веб смотреть. Вопрос как вообще правильно и принято делать.
Допустим я зарание прорисовал все графики лежат они на сервере и вызываются при выборе названия из списка отдельно картинка уже нарисованая и просто показывается(если обновлять данные можно заново скрип запустить он добавит и дорисует новые), либо хранить нарисование графики на сервере не надо и рисовать их сразу при вызове функции и отправлять в template(не знаю как это) как вообще правильно будет сделать с точки зрения хорошего тона?))
doza_and
Mazay_Ka
как вообще правильно будет сделать
Очень приближенно есть 4 критерия. Загруженность сервера(на перерисовку картинок) и время отклика у пользователя (пересылка картинок и их перегенерация займет время), сложность разработки, требования к дизайну графиков. Если делаете для себя делаейте как проще!
Определитесь с важностью этих пунктов, тогда можно будет говорить о том как правильно. В большинстве крупных проектов отрисовка идет у клиента при помощи js. Питон только отдает данные.

Преимуществ у pygal по сравнению с matplotlib думаю практически нет. matplotlib тоже может создать svg. А качество картинки дает лучше.
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