在Matplotlib中使用scatter()在3D散点图中添加图例 [英] Add a legend in a 3D scatterplot with scatter() in Matplotlib

查看:455
本文介绍了在Matplotlib中使用scatter()在3D散点图中添加图例的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想创建一个3D散点图,在同一图中使用不同的数据集,并在其标签中添加图例.我面临的问题是我无法正确添加图例,并且得到了带有空标签的图,如下图所示:

I want to create a 3D scatterplot with different datasets in the same plot and a legend with their labels. The problem I am facing is that I cannot properly add the legend and I get a plot with an empty label as the figure in:

http://tinypic.com/view.php?pic = 4jnm83& s = 5#.Uqd-05GP-gQ .

更具体地说,我得到了错误:

More specifically, I get the error:

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support <mpl_toolkits.mplot3d.art3d.Patch3DCollection object at 0x3bf46d0>
Use proxy artist instead."

请在下面找到我到目前为止尝试过的示例演示:

Please find below an example demo of what I have tried so far:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import random
import csv
from os import listdir
from os.path import isfile, join

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

handles = []
colors = ['blue', 'red']

X1 = range(0,10)
Y1 = range(0,10)
Z1 = range(0,10)

random.shuffle(X1)
random.shuffle(Y1)
random.shuffle(Z1)

scatter1 = ax.scatter(X1, Y1, Z1, c = colors[0], marker = 'o')

random.shuffle(X1)
random.shuffle(Y1)
random.shuffle(Z1)

scatter2 = ax.scatter(X1, Y1, Z1, c = colors[1], marker = 'v')

ax.set_xlabel('X', fontsize = 10)
ax.set_ylabel('Y', fontsize = 10)
ax.set_zlabel('Z', fontsize = 10)

ax.legend([scatter1, scatter2], ['label1', 'label2'])

plt.show()

我看过其他大致相似的示例,但是没有一个使用scatter()图.除了可行的解决方案之外,有人可以解释我在做什么错吗?

I have seen other roughly similar examples but none of them uses the scatter() plot. Apart from a working solution, can someone explain what am I doing wrong?

推荐答案

scatter1_proxy = matplotlib.lines.Line2D([0],[0], linestyle="none", c=colors[0], marker = 'o')
scatter2_proxy = matplotlib.lines.Line2D([0],[0], linestyle="none", c=colors[1], marker = 'v')
ax.legend([scatter1_proxy, scatter2_proxy], ['label1', 'label2'], numpoints = 1)

问题在于,图例功能不支持3D散点图返回的类型.因此,您必须创建一个具有相同特征的虚拟情节",并将其放在图例中.

The problem is that the legend function don't support the type returned by a 3D scatter. So you have to create a "dummy plot" with the same characteristics and put those in the legend.

numpoints = 1只能在图例中获得一个点
linestyle ="none"因此,图例中没有画线

numpoints = 1 to get only one dot in the legend
linestyle= "none" So there is no line drawn in the legend

这篇关于在Matplotlib中使用scatter()在3D散点图中添加图例的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆