<p>根据<a href="https://stackoverflow.com/questions/20505105/add-a-legend-in-a-3d-scatterplot-with-scatter-in-matplotlib">this</a>问题的答案,3D散点图不能与图例一起使用,因此需要制作一个没有显示的虚拟图来创建图例。下面是一个与您的问题相关的示例,该问题将图例添加到三维散点图:</p>
<pre><code>from mpl_toolkits.mplot3d import Axes3D
from pylab import *
import numpy as np
from matplotlib import cm
# Fake data
(voltage, temp) = np.meshgrid(range(10), range(10))
power1 = np.random.rand(10,10)
power2 = np.random.rand(10,10)
bifurWidth1 = 100*np.random.rand(10.,10.)
bifurWidth2 = np.random.rand(10.,10.)
# Plot data
fig = figure()
ax = fig.add_subplot(111, projection='3d')
cm1 = get_cmap("Blues")
cm2 = get_cmap("Reds")
ax.scatter(voltage, temp, power1, c = bifurWidth1, s=35, marker = 'o', cmap = cm1)
ax.scatter(voltage, temp, power2, c = bifurWidth2, s=35, marker = "^", cmap = cm2)
# Make legend
scatter1_proxy = matplotlib.lines.Line2D([0],[0], linestyle="none", c=cm1(128), marker = 'o')
scatter2_proxy = matplotlib.lines.Line2D([0],[0], linestyle="none", c=cm2(128), marker = '^')
ax.legend([scatter1_proxy, scatter2_proxy], ['label1', 'label2'], numpoints = 1)
# Label axes
fs = 12
ax.set_ylabel('Temperature (mK)',fontsize=fs)
ax.set_xlabel('Voltage (V)',fontsize=fs)
ax.set_zlabel('Power (dB)',fontsize=fs)
ax.set_title('Locating bifurcations.',fontsize=fs)
plt.show()
</code></pre>
<p><img src="https://i.stack.imgur.com/QLvQq.png" alt="3d scatter plot with legend"/></p>