У меня есть модуль для использования в iPython.
Я бы хотел, чтобы пользователь ввел все необходимое для построения графика: x, y, метка, ширина линии и т. Д.
Чтобы пользователь мог сделать что-то вроде этого:
In[1] import this_script
In[2] x=range(0,10)
In[3] y=x
In[4] magically_exposed_function plot(x,y,'r+', linewidth=2)
Это означает, что моя функция получает график строки (x, y, 'r +', linewidth = 2).Это можно проанализировать и найти значения x и y в пространстве имен iPython с помощью ip.user_ns, но я все еще застрял в том, что делать с 'r +' и linewidth = 2.В идеале я хотел бы иметь возможность:
a) импортировать все пространство имен iPython, чтобы у меня были доступны значения x и y и
b) выбросить всю строку в график ()
Что касается б), иметь что-то вроде:
plot_string = x, y, 'r+', linewidth = 2
plot(plot_string)
было бы идеально, но это не работает, как показано выше.
Возможно ли это сделать либоиз этих вещей?Есть ли более изящное решение?
Может ли пользователь, возможно, сделать заговор (x, y), и мой код мог бы захватить этот заговор и отредактировать его?
Буду очень признателен за любой совет, как справиться с этой ситуацией:)
Спасибо!--Erin
[EDIT] Демонстрация того, что я хотел бы сделать:
import matplotlib
import wx
from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigCanv
from matplotlib.figure import Figure
import IPython.ipapi
ip = IPython.ipapi.get()
import sys
class WrapperExample(wx.Frame):
def __init__(self, *args, **kwargs):
wx.Frame.__init__(self, None, -1)
self.figure = Figure()
self.axes = self.figure.add_subplot(111)
self.axes.plot(*args, **kwargs)
self.canvas = FigCanv(self, -1, self.figure)
def run_me(*args, **kwargs):
""" Plot graph from iPython
Example:
In[1] import script
In[2] x=range(0,10)
In[3] y=x
In[4] run_me x y
"""
app = wx.PySimpleApp()
wrap = WrapperExample(*args, **kwargs)
wrap.Show()
app.MainLoop()
ip.expose_magic("run_me", run_me)
[EDIT] Вот как я закончил, используя оболочку, предложенную ниже:
import wx
import matplotlib
from pylab import *
import IPython.ipapi
ip = IPython.ipapi.get()
class MainCanvas(wx.Frame):
def __init__(self, *args):
self.figure = plt.figure()
self.axes = self.figure.add_subplot(111)
self.axes.plot(*args)
show()
def run_this_plot(self, arg_s=''):
""" Run
Examples
In [1]: import demo
In [2]: rtp x y <z>
Where x, y, and z are numbers of any type
"""
args = []
for arg in arg_s.split():
try:
args.append(self.shell.user_ns[arg])
except KeyError:
raise ValueError("Invalid argument: %r" % arg)
mc = MainCanvas(*args)
# Activate the extension
ip.expose_magic("rtp", run_this_plot)