我正在探索mpld3库,不知道如何创建三维散点图。使用Matplotlib,我将执行以下操作:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter([1],[5],[7])
plt.show()
类似地,我尝试使用mpld3(在Jupyter笔记本中):导入matplotlib。mpl_工具包中的pyplot作为plt。mplot3d导入轴3D导入mpld3
mpld3.enable_notebook()
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter([1],[5],[7])
mpld3.display(fig)
我得到了错误
TypeError: array([ 0.94, 1.06]) is not JSON serializable
有什么想法吗?
这是完整的错误日志:
Traceback (most recent call last) <ipython-input-26-54fc4a65da87> in <module>()
6 N = 50
7 ax.scatter([1],[5],[7])
----> 8 mpld3.display(fig)
/usr/local/lib/python2.7/dist-packages/mpld3/_display.pyc in display(fig, closefig, local, **kwargs)
288 if closefig:
289 plt.close(fig)
--> 290 return HTML(fig_to_html(fig, **kwargs))
291
292
/usr/local/lib/python2.7/dist-packages/mpld3/_display.pyc in fig_to_html(fig, d3_url, mpld3_url, no_extras, template_type, figid, use_http, **kwargs)
234 d3_url=d3_url,
235 mpld3_url=mpld3_url,
--> 236 figure_json=json.dumps(figure_json),
237 extra_css=extra_css,
238 extra_js=extra_js)
/usr/lib/python2.7/json/__init__.pyc in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, sort_keys, **kw)
241 cls is None and indent is None and separators is None and
242 encoding == 'utf-8' and default is None and not sort_keys and not kw):
--> 243 return _default_encoder.encode(obj)
244 if cls is None:
245 cls = JSONEncoder
/usr/lib/python2.7/json/encoder.pyc in encode(self, o)
205 # exceptions aren't as detailed. The list call should be roughly
206 # equivalent to the PySequence_Fast that ''.join() would do.
--> 207 chunks = self.iterencode(o, _one_shot=True)
208 if not isinstance(chunks, (list, tuple)):
209 chunks = list(chunks)
/usr/lib/python2.7/json/encoder.pyc in iterencode(self, o, _one_shot)
268 self.key_separator, self.item_separator, self.sort_keys,
269 self.skipkeys, _one_shot)
--> 270 return _iterencode(o, 0)
271
272 def _make_iterencode(markers, _default, _encoder, _indent, _floatstr,
/usr/lib/python2.7/json/encoder.pyc in default(self, o)
182
183 """
--> 184 raise TypeError(repr(o) + " is not JSON serializable")
185
186 def encode(self, o):
TypeError: array([ 0.94, 1.06]) is not JSON serializable
不幸的是,mpld3目前不支持3D绘图。它只支持2D绘图。检查以下链接:
对不起,这不是一个完整的答案,而是一个很长的评论。。。
我可以通过编辑mpld3来消除错误_陈列具体如下:
class NumpyEncoder(json.JSONEncoder):
""" Special json encoder for numpy types """
def default(self, obj):
try:
obj=obj.tolist()
return json.JSONEncoder.encode(self, obj)
except AttributeError:
pass
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)
但是,它会在笔记本中生成一个带有错误消息的空绘图:
Javascript error adding output!
TypeError: t.map is not a function
See your browser Javascript console for more details.
看起来mpld3不是为支持3D而设计的。。。
如上所述,mpld3不支持3D图形,但请检查下面的包,它们也旨在通过python进行可视化,并与mpld3一样,将matplotlib图形转换为图形。
欢迎阅读另一个 3D Matplotlib 教程,会涉及如何绘制三维散点图。 绘制 3D 散点图非常类似于通常的散点图以及 3D 线框图。 一个简单示例: from mpl_toolkits.mplot3d import axes3d import matplotlib.pyplot as plt from matplotlib import style style.use('ggplot') f
我正在使用函数scatter和mplot3d绘制一个三维散点图。我正在为绘图中的所有点选择单一颜色,但当使用matplotlib绘制时,点的透明度将相对于与摄影机的距离进行设置。有没有办法禁用此功能? 我尝试将alpha-kwarg设置为None/1,并将vmin/vmax设置为1(试图强制颜色缩放为纯色单色),但没有成功。我在散点文档中没有看到与此设置相关的任何其他可能选项。 谢谢
散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对
散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对齐方式。 数据 颜色 设置数据系列的
散点图沿 X 和 Y 轴放置的各个数据点来绘制数据。 图表属性 选择图表类型后,可以更改其属性来自定义图表: 选项 描述 常规 背景颜色 设置图表区域的背景颜色。 不透明度 设置背景颜色的不透明度。 显示边框 显示图表外部边框。 边界颜色 设置图表外部边框的颜色。 显示标题 显示图表的主要标题。 标题 指定图表的标题。 标题字体 设置标题的字体样式。 位置 设置标题的位置。 对齐 设置标题的水平对
后果 我有这个数据框 代码是 但它不渲染。为什么啊?