python在scatter中添加图例_在Matplotlib中使用scatter()在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:

More specifically, I get the error:

/usr/lib/pymodules/python2.7/matplotlib/legend.py:610: UserWarning: Legend does not support

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()

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)

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 to get only one dot in the legend

linestyle= "none" So there is no line drawn in the legend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值