【发布时间】:2015-05-09 09:39:19
【问题描述】:
我相信之前有人问过与此类似的问题,但它并没有真正让我明白。
基本上,我有一个元组列表,每个元组都用作一个点(例如,so (x, y, z))。
我想在运行聚类算法(对点进行颜色编码)后以 2D 或 3D 的形式绘制它们。
clusters = []
def plotPoints(self):
fig = plt.figure()
if self.clusters[0].dimensions == 2:
ax = fig.add_subplot(111)
for i in range(0, len(self.clusters)):
ax.scatter(*zip(*self.clusters[i].points), c=self.clusters[i].color, marker="o", label=("Cluster " + str(i + 1)))
plt.legend(loc='upper left')
plt.show()
elif self.clusters[0].dimensions == 3:
ax = fig.add_subplot(111, projection='3d')
for i in range(0, len(self.clusters)):
ax.scatter(*zip(*self.clusters[i].points), c=self.clusters[i].color, marker="o", label=("Cluster " + str(i + 1)))
plt.legend(loc='upper left')
plt.show()
else:
print "Cannot plot in dimensions lower than 2 or higher than 3"
集群类:
class Cluster(object):
centroid = ()
dimensions = 0
color = 'k'
def __init__(self, init_pt, color):
self.points = []
self.points.append(init_pt)
self.dimensions = len(init_pt)
self.centroid = init_pt
self.color = color
def addPoint(self, pt):
try:
if len(pt) != self.dimensions:
raise ArithmeticError("Wrong number of dimensions on new point, ignoring")
else:
centroid_dim_list = []
for dim in range(0, self.dimensions):
centroid_dim_list.append((self.centroid[dim] * len(self.points) + pt[dim]) / float(len(self.points) + 1))
self.centroid = tuple(centroid_dim_list)
self.points.append(pt)
except ArithmeticError as ae:
print ae.message
pass
2D 绘图工作得很好(而且看起来非常漂亮),但 3D 绘图给了我一个警告:
UserWarning: No labeled objects found. Use label='...' kwarg on individual plots.
warnings.warn("No labeled objects found. "
并且没有出现任何图例。但是我正在标记这些点,并且我使用的代码几乎相同,所以我对问题所在感到困惑。我听说过一些关于代理对象的事情,但我不知道如何在这种情况下使用它。
【问题讨论】:
-
你用的是什么版本的matplotlib?
-
我认为使用的是 1.3.1 版。那是我的 linux 版本从 repo 中可用的版本。
标签: python python-2.7 matplotlib