2017-12-14 26 views
1

私はHtml.IでPythonプロットを変換したいのですが、参考例を取って、plotをHtml page.Belowに変換するように変更しました。Python:TypeError:array([1.])がJSONのシリアライズ可能ではありません

import matplotlib as plta 
plta.use('Agg') 
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) 

html_graph = mpld3.fig_to_html(fig) 
with open('plot.html', 'w') as the_file: 
    the_file.write(html_graph) 

私は上記のコード実行すると、それは以下のようなエラーがスローされます。

/usr/local/lib/python2.7/dist-packages/matplotlib/cbook/deprecation.py:106: MatplotlibDeprecationWarning: The axisbg attribute was deprecated in version 2.0. Use facecolor instead. 
    warnings.warn(message, mplDeprecation, stacklevel=1) 
Traceback (most recent call last): 
    File "d3tool.py", line 24, in <module> 
    html_graph = mpld3.fig_to_html(fig) 
    File "/usr/local/lib/python2.7/dist-packages/mpld3/_display.py", line 251, in fig_to_html 
    figure_json=json.dumps(figure_json, cls=NumpyEncoder), 
    File "/usr/lib/python2.7/json/__init__.py", line 250, in dumps 
    sort_keys=sort_keys, **kw).encode(obj) 
    File "/usr/lib/python2.7/json/encoder.py", line 207, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python2.7/json/encoder.py", line 270, in iterencode 
    return _iterencode(o, 0) 
    File "/usr/local/lib/python2.7/dist-packages/mpld3/_display.py", line 138, in default 
    return json.JSONEncoder.default(self, obj) 
    File "/usr/lib/python2.7/json/encoder.py", line 184, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: array([ 1.]) is not JSON serializable 

fig_to_htmlの呼び出し中にエラーが発生しました(ライン24で発生)が私を助けfunction.Please。

+1

この問題は現在、mpld3レポで開いています。ここにリンクがあります:https://github.com/mpld3/mpld3/issues/434 –

答えて

1

ファイル "mpld3/_display.py"を変更して私の問題を解決しました。

部未満に変更してください:

class NumpyEncoder(json.JSONEncoder): 
     """ Special json encoder for numpy types """ 
- 
     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,)): #### This is the fix 
+   return obj.tolist() 
      return json.JSONEncoder.default(self, obj) 

詳細はhttps://github.com/javadba/mpld3/commit/57ed37dbc4749259b1b46cba8bf28de802972adbを参照してください。

関連する問題