예제 #1
0
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
예제 #2
0
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