Форум сайта python.su
0
Привет, подскажите что можно сделать.
Есть допустить словарь(dict) у каждого ключа список значений например
у какждого ключа свой список.
Как можно реализовать чтобы допустим был график а над ним список где я могу выбрать каждый ключ из словаря а по значениям этого ключа рисовался график.
Я знаком только с mathplot по части рисования графиком, но как такое сделать там пока не понял, получается только нарисовать много графиков по всем значениям или на одном графике или на разных, а вот как взять так чтобы можно было выбирать и получать гафик в зависимости от выбора я пока не понял.
Подскажи те может на простом примере или хоть куда смотреть в какую сторону.
Спасибо.
Я так понимаю стоит веб приложение написать простейшее где наделать ссылок на каждый ключ и при клике загружать страницу где по значению данного ключа будет график. Это так мысли.
Офлайн
103
ну вот посмотрите я накидал прмер
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()
Отредактировано terabayt (Март 15, 2015 02:12:33)
Офлайн
221
получаете от сервера массив json с данными и отрисовываете на JS апликации график. это типичное решение на сегодняшний день - переносить логику на стороне клиента. Я так делал. Работает хорошо. если данные большие то можно через AJAX получать одиночные серии и отрисовывать
Офлайн
0
terabaytСпасибо, такой момент у меня больше 50 значений такого плана все разные, это можно в mathplot как выпадающим списком реализовать, то есть выбрать нужный ключ из списка и по его значениям получаем график, просто значение по у, по х их наименования. Данные получаю из базы как вариант их может быть и больше по этому вариант со списком здесь наверно самый практичный
ну вот посмотрите я накидал прмер
JOHN_16к сожалению я пока с js не так хорошо знаком думал mathplot обойтись
отрисовываете на JS апликации график
Офлайн
103
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()
Отредактировано terabayt (Март 15, 2015 16:54:22)
Офлайн
0
terabaytСпасибо вы очень помогли, это то то нужно.
Офлайн
253
Mazay_KaОчень приближенно есть 4 критерия. Загруженность сервера(на перерисовку картинок) и время отклика у пользователя (пересылка картинок и их перегенерация займет время), сложность разработки, требования к дизайну графиков. Если делаете для себя делаейте как проще!
как вообще правильно будет сделать
Офлайн