尝试将“ax.scatter”替换为ax.plot,可能使用“o”参数来获得类似的圆。这将修复透明度和图例。import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
from numpy.random import random
mpl.rcParams['legend.fontsize'] = 10
fig = plt.figure(1)
fig.clf()
ax = Axes3D(fig)
datasets = random((8,100,3))*512
my_labels = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
colors = ['k', "#B3C95A", 'b', '#63B8FF', 'g', "#FF3300",
'r', 'k']
index = 0
for data, curr_color in zip(datasets, colors):
ax.plot(np.log2(data[:, 0]), np.log2(data[:, 1]),
np.log2(data[:, 2]), 'o', c=curr_color, label=my_labels[index])
index += 1
ax.set_zlim3d([-1, 9])
ax.set_ylim3d([-1, 9])
ax.set_xlim3d([-1, 9])
ax.set_xticks(range(0,11))
ax.set_yticks([1,2,8])
ax.set_zticks(np.arange(0,9,.5))
ax.legend(loc = 'upper left')
plt.draw()
plt.show()
我添加了一些行和调整,以获得一些样本数据,并使您的演示工作的其余部分。我想你能让它工作。
设置勾号需要2010年8月的mplot3d更新,如here所述。我从Sourceforge得到了最新的mplot3d。我不太确定Matplotlib 1.0.1是否包含这个最新的更新,因为我仍然在用Matplotlib 1.0.0运行Python 2.6。
编辑
一个快速且肮脏的图例虚拟图,同时保持从散射中获得的3d透明度效果:index = 0
for data, curr_color in zip(datasets, colors):
ax.scatter(np.log2(data[:, 0]), np.log2(data[:, 1]),
np.log2(data[:, 2]), 'o', c=curr_color, label=my_labels[index])
ax.plot([], [], 'o', c = curr_color, label=my_labels[index])
index += 1