Example #1
0
def ultimate_power():
    """
    Data from http://indexed.blogspot.com/2007/08/real-ultimate-power.html
    """
    chart = VennChart(settings.width, settings.height)
    chart.add_data([100, 100, 100, 20, 20, 20, 10])
    chart.set_title('Ninjas or God')
    chart.set_legend(['unseen agents', 'super powerful', 'secret plans'])
    chart.download('venn-ultimate-power.png')
def drawTwoVenn(set1,
                set2,
                intersect,
                width,
                height,
                outfile,
                fisherU=None,
                title=None,
                legend=None,
                indicateNumberInLegend=False,
                colors=None,
                htmlReport=None):
    chart = VennChart(width, height)
    chart.add_data([set1, set2, 0, intersect])
    if title:
        chart.set_title(title)
    if legend:

        legendOut = legend[:]

        if indicateNumberInLegend:

            legendOut[0] = legend[0] + " (" + str(set1) + ")"
            legendOut[1] = legend[1] + " (" + str(set2) + ")"
        chart.set_legend(legendOut)
    if colors:
        for i in range(0, len(colors)):
            if type(colors[i]) is not StringType:
                #probably a int tuple (4 or 3)
                #print >> stderr,colors[i],"is not string"
                if type(colors[i]) is ListType or type(colors[i]) is TupleType:
                    #print >> stderr,"is list or tuple"
                    hexCode = ""
                    for color_component in colors[i]:
                        hexCode += twodigithex(color_component)
                    colors[i] = hexCode

        #print >> stderr,colors
        chart.set_colours(colors)

    chart.download(outfile)

    if fisherU:
        #build a contingency table 2x2

        box1 = intersect
        box2 = set2 - intersect
        box3 = set2
        box6 = fisherU - set2
        box7 = set1
        box8 = fisherU - set1
        box9 = fisherU
        box4 = set1 - intersect
        box5 = fisherU - set1 - set2 + intersect

        fisher_pvalues = fisher.pvalue(box1, box2, box4, box5)

        expectedIntersect = round(float(set1) * set2 / fisherU)

    if htmlReport:
        if not title:
            title = ""
        if not legend:
            legend = ["set1", "set2"]

        fout = open(htmlReport, "w")
        print >> fout, '<html><head><title>%s</title></head><body><h1>%s</h1><table width=%d><tr><td colspan=2><img src="%s"></td></tr><tr bgcolor="#AAAAAA"><td>%s</td><td>%d</td></tr><tr><td>%s</td><td>%d</td></tr> <tr bgcolor="#AAAAAA">  <td>%s only</td><td>%d</td></tr> <tr><td>%s only</td><td>%d</td></tr> <tr bgcolor="#AAAAAA"> <td>%s &#x2229; %s</td><td>%d</td></tr>   ' % (
            title, title, width, basename(outfile), legend[0], set1, legend[1],
            set2, legend[0], set1 - intersect, legend[1], set2 - intersect,
            legend[0], legend[1], intersect)

        if fisherU:
            print >> fout, '<tr><td>Universe</td><td>%d</td></tr> <tr bgcolor="#AAAAAA"> <td>E[%s &#x2229; %s]</td><td>%d</td></tr> <tr><td>dnrichment p-value</td><td>%g</td></tr> <tr bgcolor="#AAAAAA"> <td>depletion p-value</td><td>%g</td></tr>' % (
                fisherU, legend[0], legend[1], expectedIntersect,
                fisher_pvalues.right_tail, fisher_pvalues.left_tail)

        print >> fout, '</body></html>'
        fout.close()
def drawThreeVenn(set1,
                  set2,
                  set3,
                  set1set2Intersect,
                  set1set3Intersect,
                  set2set3Intersect,
                  allIntersect,
                  width,
                  height,
                  outfile,
                  title=None,
                  legend=None,
                  indicateNumberInLegend=False,
                  colors=None,
                  htmlReport=None):
    chart = VennChart(width, height)
    chart.add_data([
        set1, set2, set3, set1set2Intersect, set1set3Intersect,
        set2set3Intersect, allIntersect
    ])
    if title:
        chart.set_title(title)
    if legend:
        legendOut = legend[:]

        if indicateNumberInLegend:
            legendOut[0] = legend[0] + " (" + str(set1) + ")"
            legendOut[1] = legend[1] + " (" + str(set2) + ")"
            legendOut[2] = legend[2] + " (" + str(set3) + ")"

        chart.set_legend(legendOut)

    if colors:
        for i in range(0, len(colors)):
            if type(colors[i]) is not StringType:
                #probably a int tuple (4 or 3)
                #print >> stderr,colors[i],"is not string"
                if type(colors[i]) is ListType or type(colors[i]) is TupleType:
                    #print >> stderr,"is list or tuple"
                    hexCode = ""
                    for color_component in colors[i]:
                        hexCode += twodigithex(color_component)
                    colors[i] = hexCode

        #print >> stderr,colors
        chart.set_colours(colors)

    chart.download(outfile)

    if htmlReport:
        fout = open(htmlReport, "w")
        set1only = set1 - set1set2Intersect - set1set3Intersect + allIntersect
        set2only = set2 - set1set2Intersect - set2set3Intersect + allIntersect
        set3only = set3 - set1set3Intersect - set2set3Intersect + allIntersect

        if not title:
            title = ""
        if not legend:
            legend = ["set1", "set2", "set3"]

        print >> fout, '<html><head><title>%s</title></head><body><h1>%s</h1><table width=%d><tr><td colspan=2><img src="%s"></td></tr><tr bgcolor="#AAAAAA"><td>%s</td><td>%d</td></tr><tr><td>%s</td><td>%d</td></tr> <tr bgcolor="#AAAAAA">  <td>%s</td><td>%d</td></tr> <tr>  <td>%s only</td><td>%d</td></tr>  <tr bgcolor="#AAAAAA"> <td>%s only</td><td>%d</td> </tr>  <tr><td>%s only</td><td>%d</td> </tr> <tr bgcolor="#AAAAAA"> <td>%s &#x2229; %s</td><td>%d</td></tr> <tr> <td>%s &#x2229; %s</td><td>%d</td></tr> <tr bgcolor="#AAAAAA"> <td>%s &#x2229; %s</td><td>%d</td></tr> <tr> <td>%s &#x2229; %s &#x2229; %s </td><td>%d</td></tr> </body></html>' % (
            title, title, width, basename(outfile), legend[0], set1, legend[1],
            set2, legend[2], set3, legend[0], set1only, legend[1], set2only,
            legend[2], set3only, legend[0], legend[1], set1set2Intersect,
            legend[0], legend[2], set1set3Intersect, legend[1], legend[2],
            set2set3Intersect, legend[0], legend[1], legend[2], allIntersect)
        fout.close()