Python:TypeError: array([ 1.]) 不是 JSON 可序列化的

标签 python numpy matplotlib mpld3

我想在 Html 中转换 python 图。我已经引用了示例,我已将其更改为将图转换为 Html 页面。下面是我的代码:

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 行发生错误,请帮助我。

最佳答案

我已经通过更改文件“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了解更多详情。

关于Python:TypeError: array([ 1.]) 不是 JSON 可序列化的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808676/

相关文章:

python - 如何在Python中对数据框中的分类变量(系列)进行编码?

python - 更快的 Python 列表理解

python - 通过使用 np.newaxis 进行 RGB 成像,从 ( :, :, 1) 扩展到 ( :, :, 3)

python - numpy.ufunc 大小错误,尝试重新编译。即使使用最新的 pandas 和 numpy 版本

python - 使用掩码替换 numpy 数组中的字符串会导致字符串被截断

python - 椭圆没有显示 - python matplotlib

python - Pandas 数据框的样本行与列中的计数成比例

python - 迁移过程中创建FK关系

python - fill_between 总是低于绘图线

Python 使用 Matplotlib 将总计添加到绘图中