def __init__(self, clust_data, labels = None, bsize = 10, tree_space = 200):
self.space = tree_space
colours = ['blue', 'green', 'red', 'cyan', 'magenta', 'brown', 'orange']
self.colour_map = self._init_colours(colours, [ x.cluster_id for x in clust_data.datapoints ])
if labels is None:
labels = [ clust_data.datapoints[x].sample_id for x in clust_data.reorder_indices ]
try:
self.font = ImageFont.load('courR08.pil') #Copyright (c) 1987 Adobe Systems, Inc., Portions Copyright 1988 Digital Equipment Corp.
except IOError:
self.font = None
if len(clust_data.consensus_matrix) != len(labels):
raise ValueError, "Number of columns and column label arrays have different lengths!"
Hmap.__init__(self, clust_data.consensus_matrix, bsize = bsize) #Creates image in self.im if HMAP_ENABLED
if self.im is not None:
old_draw = ImageDraw.Draw(self.im)
self.max_textsize = 0
for label in labels:
self.max_textsize = max(self.max_textsize, old_draw.textsize(label, font=self.font)[0])
del old_draw #Keep GC from keeping the old image around
if clust_data.tree is None:
self.space = self.max_textsize + 5
#Prepare
newsize = (self.im.size[1] + self.space, self.im.size[0]) #To hold our rotated copy and some text
im = Image.new('RGBA', newsize, 'white')
#Trick to make vertical text when we're done, and add tree space
im.paste(self.im.rotate(-90), (0, 0, self.im.size[1], self.im.size[0]))
self.im = im
self.draw = ImageDraw.Draw(self.im)
#Actual work
self._add_cluster_labels(labels)
if clust_data.tree is not None:
self._draw_dendogram(clust_data.tree)
#Finish
self.im = self.im.rotate(90)
评论列表
文章目录