带有Python错误的MPLD3

带有Python错误的MPLD3,python,mpld3,Python,Mpld3,我试图复制这个网站上的例子: 但是我得到了以下错误:类型为'ndarray'的对象不是JSON可序列化的 我不知道我需要改变什么 代码如下: import matplotlib.pyplot as plt import numpy as np import mpld3 fig, ax = plt.subplots(subplot_kw=dict(axisbg='#EEEEEE')) N = 100 scatter = ax.scatter(np.random.normal(size=N),

我试图复制这个网站上的例子:

但是我得到了以下错误:
类型为'ndarray'的对象不是JSON可序列化的

我不知道我需要改变什么

代码如下:

import matplotlib.pyplot as plt
import numpy as np
import mpld3

fig, ax = plt.subplots(subplot_kw=dict(axisbg='#EEEEEE'))
N = 100

scatter = ax.scatter(np.random.normal(size=N),
                     np.random.normal(size=N),
                     c=np.random.random(size=N),
                     s=1000 * np.random.random(size=N),
                     alpha=0.3,
                     cmap=plt.cm.jet)
ax.grid(color='white', linestyle='solid')

ax.set_title("Scatter Plot (with tooltips!)", size=20)

labels = ['point {0}'.format(i + 1) for i in range(N)]
tooltip = mpld3.plugins.PointLabelTooltip(scatter, labels=labels)
mpld3.plugins.connect(fig, tooltip)

mpld3.show()
确切的错误是:

Traceback (most recent call last):
  File "C:\Program Files\JetBrains\PyCharm 2017.3.1\helpers\pydev\pydev_run_in_console.py", line 52, in run_file
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files\JetBrains\PyCharm 2017.3.1\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/Main/PycharmProjects/Macrobond_API/scenario testing.py", line 22, in <module>
    mpld3.show()
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mpld3\_display.py", line 358, in show
    html = fig_to_html(fig, **kwargs)
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mpld3\_display.py", line 251, in fig_to_html
    figure_json=json.dumps(figure_json, cls=NumpyEncoder),
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 238, in dumps
    **kw).encode(obj)
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 199, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 257, in iterencode
    return _iterencode(o, 0)
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\site-packages\mpld3\_display.py", line 138, in default
    return json.JSONEncoder.default(self, obj)
  File "C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\json\encoder.py", line 180, in default
    o.__class__.__name__)
TypeError: Object of type 'ndarray' is not JSON serializable
回溯(最近一次呼叫最后一次):
文件“C:\Program Files\JetBrains\PyCharm 2017.3.1\helpers\pydev\pydev_run_in_console.py”,第52行,run_文件
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“C:\Program Files\JetBrains\PyCharm 2017.3.1\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“C:/Users/Main/PycharmProjects/Macrobond_API/scenario testing.py”,第22行,在
mpld3.show()
文件“C:\Users\Main\AppData\Local\Programs\Python36-32\lib\site packages\mpld3\\u display.py”,第358行,在show中
html=图到图html(图,**kwargs)
文件“C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\site packages\mpld3\\u display.py”,第251行,如图所示
图json=json.dumps(图json,cls=NumpyEncoder),
文件“C:\Users\Main\AppData\Local\Programs\Python36-32\lib\json\\ uuu init\uuu.py”,第238行,转储
**千瓦)。编码(obj)
文件“C:\Users\Main\AppData\Local\Programs\Python36-32\lib\json\encoder.py”,第199行,在encode中
chunks=self.iterencode(o,\u one\u shot=True)
文件“C:\Users\Main\AppData\Local\Programs\Python36-32\lib\json\encoder.py”,第257行,在iterencode中
返回_iterencode(o,0)
默认情况下,文件“C:\Users\Main\AppData\Local\Programs\Python\Python36-32\lib\site packages\mpld3\\u display.py”第138行
返回json.JSONEncoder.default(self,obj)
默认情况下,文件“C:\Users\Main\AppData\Local\Programs\Python36-32\lib\json\encoder.py”第180行
o、 ________;类_________
TypeError:类型为“ndarray”的对象不可JSON序列化

针对此错误提出了一个未决问题,链接为

一种解决方法是编辑mpld3模块内的
mpld3/\u display.py
文件,编辑将在下面的
default
功能中进行

之前:

def default(self, obj):
    if isinstance(obj, (numpy.int_, numpy.intc, numpy.intp, numpy.int8,
        numpy.int16, numpy.int32, numpy.int64, numpy.uint8,
        numpy.uint16,numpy.uint32, numpy.uint64)):
        return int(obj)
    elif isinstance(obj, (numpy.float_, numpy.float16, numpy.float32, 
        numpy.float64)):
        return float(obj)
    return json.JSONEncoder.default(self, obj)
之后:

def default(self, obj):
    if isinstance(obj, (numpy.int_, numpy.intc, numpy.intp, numpy.int8,
        numpy.int16, numpy.int32, numpy.int64, numpy.uint8,
        numpy.uint16,numpy.uint32, numpy.uint64)):
        return int(obj)
    elif isinstance(obj, (numpy.float_, numpy.float16, numpy.float32, 
        numpy.float64)):
        return float(obj)
    elif isinstance(obj, (numpy.ndarray,)): # add this line
        return obj.tolist() # add this line
    return json.JSONEncoder.default(self, obj)
基本上你只是加了

elif isinstance(obj, (numpy.ndarray,)): # add this line
            return obj.tolist() # add this line

您有权访问您的mpld3模块文件吗?是的,我找到了。谢谢。对不起,我没有考虑在GitHub上检查这个。