def drawSVG(self, data, cLength = 2500, offset= (80, 160, 60, 60), size=(1280,880), XLabel="Marker GMb", YLabel="Transcript GMb"): entities = { "colorText" : "fill:darkblue;", "strokeText" : ";stroke:none;stroke-width:0;", "allText" : "font-family:Helvetica;", "titleText" : "font-size:22;font-weight:bold;", "subtitleText" : "font-size:18;font-weight:bold;", "headlineText" : "font-size:14;font-weight:bold;", "normalText" : "font-size:12;", "legendText" : "font-size:11;text-anchor:end;", "valuesText" : "font-size:12;", "boldValuesText" : "font-size:12;font-weight:bold;", "smallText" : "font-size:10;", "vText" : "writing-mode:tb-rl", "rightText" : "text-anchor:end;", "middleText" : "text-anchor:middle;", "bezgrenzstyle" : "fill:none;stroke:#11A0FF;stroke-width:40;stroke-antialiasing:true;", "rectstyle" : "fill:lightblue;stroke:none;opacity:0.2;", "fillUnbebaut" : "fill:#CCFFD4;stroke:none;", "fillNodata" : "fill:#E7E7E7;stroke:black;stroke-width:2;stroke-antialiasing:true;", "fillNodataLegend" : "fill:#E7E7E7;stroke:black;stroke-width:0.5;stroke-antialiasing:true;", "grundzeitstyle" : "fill:none;stroke:#E00004;stroke-width:60;stroke-antialiasing:true;", "bezgrenzstyle" : "fill:none;stroke:#11A0FF;stroke-width:40;stroke-antialiasing:true;", "mapAuthor" : "A. Neumann", } cWidth, cHeight = size canvasSVG = svg.drawing(entities) #create a drawing drawSpace=svg.svg((0, 0, cWidth, cHeight), cWidth, cHeight, xml__space="preserve", zoomAndPan="disable", onload="initMap(evt);", xmlns__a3="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/", a3__scriptImplementation="Adobe") #create a svg drawingspace canvasds=svg.description('Genome Graph') #define a description drawSpace.addElement(canvasds) #add the description to the svg #need to be modified or deleted xLeftOffset, xRightOffset, yTopOffset, yBottomOffset = offset plotWidth = cWidth - xLeftOffset - xRightOffset plotHeight = cHeight - yTopOffset - yBottomOffset drawSpace.addElement(svg.script("", language="javascript", xlink__href="/javascript/svg.js")) #add defs defs = svg.defs() symbol1= svg.symbol(id="magnifyer", overflow="visible", style="fill:white;stroke:orange;stroke-width:2;") symbol1.addElement(svg.line(0, 0, -8, 20)) symbol1.addElement(svg.circle(0, 0, 8)) symbol1.addElement(svg.line(-4, 0, 4, 0, style="stroke:orange;stroke-width:2;")) defs.addElement(symbol1) symbol2= svg.symbol(id="magnifyerZoomIn",overflow="visible") symbol2.addElement(svg.use(link="#magnifyer", id="zoomIn")) symbol2.addElement(svg.line(0, -4, 0, 4, style="stroke:orange;stroke-width:2;")) defs.addElement(symbol2) drawSpace.addElement(defs) symbol3= svg.symbol(id="msgbox", overflow="visible", style="fill:white;stroke:orange;stroke-width:1;opacity:0.8;") symbol3.addElement(svg.rect(-80, -190, 300, 150, rx=10, ry=10)) symbol3.addElement(svg.line(21, -40, 58, -40, style="stroke:white;")) symbol3.addElement(svg.polyline([[20, -40], [0, 0], [60, -40]])) symbol3.addElement(svg.text(-60, -160, "ProbeSet ", style="&colorText; &allText; &subtitleText; &strokeText;")) symbol3.addElement(svg.text(-60, -125, "Marker ", style="&colorText; &allText; &subtitleText; &strokeText;")) symbol3.addElement(svg.text(-60, -90, "LRS ", style="&colorText; &allText; &subtitleText; &strokeText;")) symbol3.addElement(svg.text(-60, -55, "P value ", style="&colorText; &allText; &subtitleText; &strokeText;")) defs.addElement(symbol3) g = svg.group("title") g.addElement(svg.text(cWidth-40, 30, "Genome Graph", style="&colorText; &allText; &titleText; &rightText;")) g.addElement(svg.text(cWidth-40, 50, "Whole Transcriptome Mapping", style="&colorText; &allText; &subtitleText; &rightText;")) drawSpace.addElement(g) #draw Main display area border mainSquare = cHeight-60 cordZOOM = 10 drawSpace.addElement(svg.rect(8, 8, mainSquare+4, mainSquare+4,'none',"orange",0.5, rx="5", ry="5")) drawSpace.addElement(svg.text(10+mainSquare/2, 40+mainSquare,'Marker GMb', style="&colorText; &allText; &titleText; &middleText;", id="XLabel")) drawSpace.addElement(svg.text(mainSquare + 80, 10+mainSquare/2,'Transcript GMb', style="&colorText; &allText; &titleText; &middleText; &vText;", id="YLabel")) #draw overview display area drawSpace.addElement(svg.rect(cWidth-40-260, 60, 260, 260,'none',"orange",0.5, rx="5", ry="5")) drawSpaceThumb= svg.svg(id="overviewPlot",x=cWidth-40-260,y="60",width="260", height="260",viewBox=(0, 0, mainSquare*cordZOOM, mainSquare*cordZOOM)) g = svg.group(style="&bezgrenzstyle;") g.addElement(svg.use("#grid")) drawSpaceThumb.addElement(g) drawSpaceThumb.addElement(svg.rect(id="overviewRect",style="&rectstyle;", x="0",y="0",width=mainSquare*cordZOOM,height=mainSquare*cordZOOM, onmouseover="statusChange('click and drag rectangle to change extent');", onmousedown="beginPan(evt);", onmousemove="doPan(evt);", onmouseup="endPan();", onmouseout="endPan();")) drawSpace.addElement(drawSpaceThumb) #draw navigator g = svg.group(id="navigatorElements") g.addElement(svg.use("#magnifyerZoomIn", id="zoomIn", transform="translate(%d,350)" % (cWidth-40-130-20), onmouseover="magnify(evt,1.3,'in');", onmouseout="magnify(evt,1,'in');", onclick="zoomIt('in');")) g.addElement(svg.use("#magnifyer", id="zoomOut", transform="translate(%d,350)" % (cWidth-40-130+20), onmouseover="magnify(evt,1.3,'out');",onmouseout="magnify(evt,1,'out');", onclick="zoomIt('out');")) drawSpace.addElement(g) g = svg.group(id="statusBar") g.addElement(svg.text(cWidth-40-260, 360, "ZOOM: 100%", style="fill:orange; font-size:14;", id="zoomValueObj")) g.addElement(svg.text(cWidth-40-260, 380, "Status:", style="&colorText; &allText; &smallText;")) g.addElement(svg.text(cWidth-40-260, 395, "Loading Plot", style="&colorText; &allText; &smallText;", id="statusText")) drawSpace.addElement(g) #draw main display area drawSpaceMain= svg.svg((0, 0, mainSquare*cordZOOM, mainSquare*cordZOOM), mainSquare, mainSquare, id="mainPlot",x="10",y="10") mPlotWidth = mPlotHeight = 0.8*mainSquare*cordZOOM drawSpaceMain.addElement(svg.rect(mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1, mPlotWidth, mPlotHeight,style="fill:white", onmousemove="showChr(evt);", onmouseover="showChr(evt);", onmouseout="showNoChr(evt);")) #draw grid g = svg.group("grid", style="stroke:lightblue;stroke-width:3", transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1)) if 1: #self.grid == "on": js = [] for key in self.mouseChrLengthDict.keys(): length = self.mouseChrLengthDict[key] js.append(mPlotWidth*length/cLength) if length != 0: yCoord = mPlotHeight*(1.0-length/cLength) l = svg.line(0,yCoord ,mPlotWidth, yCoord) g.addElement(l) xCoord = mPlotWidth*length/cLength l = svg.line(xCoord, 0 ,xCoord, mPlotHeight) g.addElement(l) js.sort() drawSpace.addElement(svg.script("",language="javascript", cdata="var openURL=\"%s\";\nvar chrLength=%s;\n" % (self.openURL, js))) g.addElement(svg.rect(0, 0, mPlotWidth, mPlotHeight,'none','black',10)) drawSpaceMain.addElement(g) #draw Scale g = svg.group("scale", style="stroke:black;stroke-width:0", transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1)) i = 100 scaleFontSize = 11*cordZOOM while i < cLength: yCoord = mPlotHeight - mPlotHeight*i/cLength l = svg.line(0,yCoord ,-5*cordZOOM, yCoord) g.addElement(l) t = svg.text(-40*cordZOOM, yCoord +5*cordZOOM, "%d"% i, 100, "verdana") # coordinate tag Y g.addElement(t) xCoord = mPlotWidth*i/cLength l = svg.line(xCoord, mPlotHeight, xCoord, mPlotHeight+5*cordZOOM) g.addElement(l) if i%200 == 0: t = svg.text(xCoord, mPlotHeight+10*cordZOOM, "%d"% i, 100, "verdana") # coordinate tag X g.addElement(t) i += 100 drawSpaceMain.addElement(g) #draw Points finecolors = Plot.colorSpectrumSVG(12) finecolors.reverse() g = preColor = "" for item in data: _probeset, _chr, _Mb, _marker, _pvalue = item[2:] try: _idx = int((-math.log10(_pvalue))*12/6.0) # add module name _color = finecolors[_idx] except: _color = finecolors[-1] if _color != preColor: preColor = _color if g: drawSpaceMain.addElement(g) g = svg.group("points", style="stroke:%s;stroke-width:5" % _color, transform="translate(%d,%d)" % (mainSquare*cordZOOM*0.1, mainSquare*cordZOOM*0.1), onmouseover="mvMsgBox(evt);", onmouseout="hdMsgBox();", onmousedown="openPage(evt);") else: pass px = mPlotWidth*item[0]/cLength py = mPlotHeight*(1.0-item[1]/cLength) l = svg.line("%2.1f" % (px-3*cordZOOM), "%2.1f" % py, "%2.1f" % (px+3*cordZOOM), "%2.1f" % py, ps=_probeset, mk=_marker) g.addElement(l) drawSpaceMain.addElement(g) """ #draw spectrum i = 0 j = 0 middleoffsetX = 40 labelFont=pid.Font(ttf="tahoma",size=12,bold=0) for dcolor in finecolors: drawSpace.drawLine(xLeftOffset+ plotWidth + middleoffsetX -15 , plotHeight + yTopOffset - i, \ xLeftOffset+ plotWidth + middleoffsetX+15 , plotHeight + yTopOffset - i, color=dcolor) if i % 50 == 0: drawSpace.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i, \ xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i, color=pid.black) drawSpace.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+5, font = labelFont) j += 1 i += 1 drawSpace.drawLine(xLeftOffset+ plotWidth +middleoffsetX+15 ,plotHeight + yTopOffset - i+1, \ xLeftOffset+ plotWidth +middleoffsetX+20,plotHeight + yTopOffset - i+1, color=pid.black) drawSpace.drawString("%1.1f" % -j , xLeftOffset+ plotWidth +middleoffsetX+25 ,plotHeight + yTopOffset - i+6, font = labelFont) labelFont=pid.Font(ttf="tahoma",size=14,bold=1) drawSpace.drawString("Log(pValue)" , xLeftOffset+ plotWidth +middleoffsetX+60 ,plotHeight + yTopOffset - 100, font = labelFont, angle =90) labelFont=pid.Font(ttf="verdana",size=18,bold=0) drawSpace.drawString(XLabel, xLeftOffset + (plotWidth -drawSpace.stringWidth(XLabel,font=labelFont))/2.0, plotHeight + yTopOffset +40, color=pid.blue, font=labelFont) drawSpace.drawString(YLabel,xLeftOffset-60, plotHeight + yTopOffset-(plotHeight -drawSpace.stringWidth(YLabel,font=labelFont))/2.0, color=pid.blue, font=labelFont, angle =90) """ drawSpace.addElement(drawSpaceMain) g= svg.group(id="dispBox", overflow="visible", style="fill:white;stroke:orange;stroke-width:1;opacity:0.85;", transform="translate(%d,650)" % (cWidth-40-300), visibility="hidden") g.addElement(svg.rect(-80, -190, 300, 150, rx=10, ry=10)) g.addElement(svg.line(21, -40, 58, -40, style="stroke:white;")) g.addElement(svg.polyline([[20, -40], [0, 0], [60, -40]])) g.addElement(svg.text(-60, -160, "ProbeSet ", style="&colorText; &allText; &subtitleText; &strokeText;", id="_probeset")) g.addElement(svg.text(-60, -125, "Marker ", style="&colorText; &allText; &subtitleText; &strokeText;", id="_marker")) drawSpace.addElement(g) canvasSVG.setSVG(drawSpace) #set the svg of the drawing to the svg return canvasSVG