Sage 绘图时出现“too many values to unpack”的 ValueError 错误

3

以下是我目前的代码。我已经下载了Python 2.7(和Sage一起),并在Mac OS X 10.6.8上从终端运行它(尽管,只要我弄清楚这些错误是怎么回事,我就计划从 notebook() GUI 运行它)。

sage: import scipy
sage: import numpy
sage: import matplotlib
sage: cd /Users/nickscomputer/Desktop
/Users/nickscomputer/Desktop
sage: DATA = numpy.loadtxt("PracticeDat.txt")
sage: DATA
array([[   1.,    1.],
   [   2.,    4.],
   [   3.,    9.],
   [   4.,   16.],
   [   5.,   25.],
   [   6.,   36.],
   [   7.,   49.],
   [   8.,   64.],
   [   9.,   81.],
   [  10.,  100.]])
sage: X = DATA[:,0]
sage: Y = DATA[:,1]
sage: plot(X,Y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/Users/nickscomputer/Desktop/<ipython console> in <module>()

/Applications/sage/local/lib/python2.7/site-packages/sage/misc/decorators.pyc in wrapper(*args, **kwds)
    685                     kwds[new_name] = kwds[old_name]
    686                     del kwds[old_name]
--> 687             return func(*args, **kwds)
    688         
    689         return wrapper

 /Applications/sage/local/lib/python2.7/site-packages/sage/misc/decorators.pyc in wrapper(*args, **kwds)
    532                 options['__original_opts'] = kwds
    533             options.update(kwds)
--> 534             return func(*args, **options)
    535 
    536         #Add the options specified by @options to the signature of the wrapped

/Applications/sage/local/lib/python2.7/site-packages/sage/plot/plot.pyc in plot(funcs, *args, **kwds)
   1024         # if there is one extra arg, then it had better be a tuple
   1025         elif n == 1:
-> 1026             G = _plot(funcs, *args, **kwds)
   1027         elif n == 2:
   1028         # if there are two extra args, then pull them out and pass them as a tuple

/Applications/sage/local/lib/python2.7/site-packages/sage/plot/plot.pyc in _plot(funcs, xrange,     parametric, polar, fill, label, randomize, **options)
   1095         return Graphics()
   1096     funcs, ranges = setup_for_eval_on_grid(funcs, [xrange], options['plot_points'])
-> 1097     xmin, xmax, delta = ranges[0]
   1098     xrange=ranges[0][:2]
   1099     #parametric_plot will be a list or tuple of two functions (f,g)

ValueError: too many values to unpack

我尝试使用list_plot,但是出现了以下错误:

sage: list_plot(X,Y)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)

/Users/nickscomputer/Desktop/<ipython console> in <module>()

/Applications/sage/local/lib/python2.7/site-packages/sage/misc/decorators.pyc in wrapper(*args, **kwds)
    532                 options['__original_opts'] = kwds
    533             options.update(kwds)
--> 534             return func(*args, **options)
    535 
    536         #Add the options specified by @options to the signature of the wrapped

/Applications/sage/local/lib/python2.7/site-packages/sage/plot/plot.pyc in list_plot(data, plotjoined, **kwargs)
   1561     """
   1562     from sage.plot.all import line, point
-> 1563     if data == {} or data == () or data == []:
   1564         return Graphics()
   1565     if isinstance(data, dict):

ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

我也尝试了这个选项,但是它生成了空的绘图坐标轴和以下错误:

sage: plot((X,Y))
verbose 0 (1978: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate  function at 200 points.
verbose 0 (1978: plot.py, generate_plot_points) Last error message: ''numpy.ndarray' object is not callable'
verbose 0 (1978: plot.py, generate_plot_points) WARNING: When plotting, failed to evaluate function at 200 points.
verbose 0 (1978: plot.py, generate_plot_points) Last error message: ''numpy.ndarray' object is not callable'

1
请注意,Sage包含Python 2.7:您只需运行sage --python即可。 - John Palmieri
2个回答

2
使用 `list_plot`。它的文档说:
如果您有要相互绘制的 x 值和 y 值的单独列表,请使用 "zip" 命令将其转换为一个包含 (x,y) 值对的单个列表,并将结果输入到 "list_plot" 中。
因此,特别地,使用 `list_plot(zip(X,Y))`。或者,将 `DATA` 转换为单个列表:使用 `list_plot(DATA.tolist())`。

0
我还想指出,我喜欢使用带有linestyle=''选项的line(),这样我就可以获得更多的matplotlib选项(由于某种原因,list_plotpoints不能很好地实现这一点):
DATA = [[   1.,    1.],
   [   2.,    4.],
   [   3.,    9.],
   [   4.,   16.],
   [   5.,   25.],
   [   6.,   36.],
   [   7.,   49.],
   [   8.,   64.],
   [   9.,   81.],
   [  10.,  100.]]
line(DATA,marker='^',linestyle='')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接