def createIntensityHeatmap(resultList, scopes=[0.2, 0.4, 0.6, 0.8, 1], recSize = 20, onlyPositiveResults=True): """Creates a heatmap chart showing the intensity of plagiarism in for the given results. """ #===create intensity matrix=== if onlyPositiveResults: results = getPositiveResults(resultList) else: results = resultList if not results: return None intensityDict = {} xDict = {} yDict = {} for r in results: rIds = r.getIdentifier() intensityDict.setdefault(tuple(rIds), r.getSimilarity()) if (not xDict.has_key(rIds[0]) and not yDict.has_key(rIds[1]) and not yDict.has_key(rIds[0]) and not xDict.has_key(rIds[1])): xDict.setdefault(rIds[0], len(xDict)) yDict.setdefault(rIds[1], len(yDict)) elif xDict.has_key(rIds[0]) and not yDict.has_key(rIds[1]): yDict.setdefault(rIds[1], len(yDict)) elif not xDict.has_key(rIds[0]) and yDict.has_key(rIds[1]): xDict.setdefault(rIds[0], len(xDict)) elif yDict.has_key(rIds[0]) and not xDict.has_key(rIds[1]): xDict.setdefault(rIds[1], len(xDict)) elif not yDict.has_key(rIds[0]) and xDict.has_key(rIds[1]): yDict.setdefault(rIds[0], len(yDict)) matrix = [[0 for x in xDict] for y in yDict] xLabelList = xDict.keys() xLabelList.sort() yLabelList = yDict.keys() yLabelList.sort() for y in xrange(len(yLabelList)): for x in xrange(len(xLabelList)): xL = xLabelList[x] yL = yLabelList[y] val = intensityDict.get((xL, yL)) if not val: val = intensityDict.get((yL, xL)) matrix[y][x] = val #===init=== font = ImageFont.load_default() #color init colorImgFG = (0,0,0) colorImgBG = (255,255,255) colorChartBG = (230, 230, 230) colorGrid = (100,100,100) #create heatmap img img = createHeatmapChart(matrix, xLabelList, yLabelList, recSize = recSize, font = font) maxX = img.size[0] maxY = img.size[1] #add legend legendimg = createLegend(scopes, maxY, font, colorImgBG, colorImgFG) newImg = Image.new("RGB", (maxX+legendimg.size[0], maxY)) newImg.paste(img, (0,0)) newImg.paste(legendimg, (img.size[0]+1, 0)) #clean up del font #return img return newImg
def createClusterHeatmap(resultList, recSize = 20, onlyPositiveResults=True): """Creates a heatmap chart showing the clusters found in the given results. """ #===create cluster matrix=== if onlyPositiveResults: #get all postive Results results = getPositiveResults(resultList) else: results = resultList if not results: return None #extract ids and clusters ids = getIdentifier(results) ids.sort() clusters = getClusters(results) print str(clusters) #create matrix matrix = [[0 for x in ids] for y in ids] for y in xrange(len(ids)): for x in xrange(len(ids)): xL = ids[x] yL = ids[y] if x!=y: val = getClusterNr(xL, yL, clusters) else: val = None matrix[y][x] = val #===init=== font = ImageFont.load_default() scopes = [(i+0.5) for i in xrange(len(clusters)+1)] print scopes #color init colorImgFG = (0,0,0) colorImgBG = (255,255,255) colorChartBG = (230, 230, 230) colorGrid = (100,100,100) #create heatmap img img = createHeatmapChart(matrix, ids, ids, scopes = scopes, recSize = recSize, font = font) maxX = img.size[0] maxY = img.size[1] #add legend #=============================================================================== # legendimg = createLegend(scopes, maxY, font, colorImgBG, colorImgFG) # newImg = Image.new("RGB", (maxX+legendimg.size[0], maxY)) # newImg.paste(img, (0,0)) # newImg.paste(legendimg, (img.size[0]+1, 0)) #=============================================================================== #clean up del font #return img # return newImg return img