python - 使用带有LinkedBrush的matplotlib mpld3的Json序列化错误

标签 python matplotlib mpld3

LinkedBrushmpld3(d3 上的matplotlib)示例 http://mpld3.github.io/examples/linked_brush.html提供以下代码示例:

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris

import mpld3
from mpld3 import plugins, utils


data = load_iris()
X = data.data
y = data.target

# dither the data for clearer plotting
X += 0.1 * np.random.random(X.shape)

fig, ax = plt.subplots(4, 4, sharex="col", sharey="row", figsize=(8, 8))
fig.subplots_adjust(left=0.05, right=0.95, bottom=0.05, top=0.95,
                    hspace=0.1, wspace=0.1)

for i in range(4):
    for j in range(4):
        points = ax[3 - i, j].scatter(X[:, j], X[:, i],
                                      c=y, s=40, alpha=0.6)

# remove tick labels
for axi in ax.flat:
    for axis in [axi.xaxis, axi.yaxis]:
        axis.set_major_formatter(plt.NullFormatter())

# Here we connect the linked brush plugin
plugins.connect(fig, plugins.LinkedBrush(points))

mpld3.show()

虽然公共(public)网页显示链接输出矩阵,但在本地运行时会出现 json 序列化错误:

Traceback (most recent call last):
  File "/git/scalatesting/src/main/python/mpld3_linkedbrush.py", line 34, in <module>
    mpld3.show()
  File "/usr/local/lib/python2.7/site-packages/mpld3/_display.py", line 358, in show
    html = fig_to_html(fig, **kwargs)
  File "/usr/local/lib/python2.7/site-packages/mpld3/_display.py", line 251, in fig_to_html
    figure_json=json.dumps(figure_json, cls=NumpyEncoder),
  File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 251, in dumps
    sort_keys=sort_keys, **kw).encode(obj)
  File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 207, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", line 270, in iterencode
    return _iterencode(o, 0)
  File "/usr/local/lib/python2.7/site-packages/mpld3/_display.py", line 138, in default
    return json.JSONEncoder.default(self, obj)
  File "/usr/local/Cellar/python/2.7.14/Frameworks/Python.framework/Versions/2.7/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

本地环境是

$pip show mpld3
Name: mpld3
Version: 0.3
Summary: D3 Viewer for Matplotlib
Home-page: http://mpld3.github.com
Author: Jake VanderPlas
Author-email: jakevdp@cs.washington.edu
License: BSD 3-clause
Location: /usr/local/lib/python2.7/site-packages

$python -V
Python 2.7.14

今天安装了 mpld3。是否存在 mpld3 版本控制问题?还有其他建议吗?

最佳答案

根据@snakecharmerb 的评论,我从 mpld3 fork ,输入了建议的修复程序,并从我在 github 上的新分支安装了 pip。

修复在这里:https://github.com/javadba/mpld3/tree/display_fix .它可以通过以下方式安装:

python -m pip install --user "git+https://github.com/javadba/mpld3@display_fix"

运行良好:json 序列化 错误消失,9 个图表之间的链接正常运行:

enter image description here

关于python - 使用带有LinkedBrush的matplotlib mpld3的Json序列化错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47380865/

相关文章:

python - 如何返回字典格式?

python - 使用 matplotlib 绘制大量点并耗尽内存

python - 离线显示MPLD3图

python 数据自动重采样

python - 如何向 bravado 创建的 API 客户端添加授权 header

python - Tensorflow:更改深度 CNN 的批量大小时出错

python - 使用 "genfromtxt"提取列

python - Pyplot 极坐标散点图颜色的标志

python - mpld3 图,注释问题

Python:float() 参数必须是字符串或数字,而不是“pandas”