def main(): f = file("Translate1-2004-01-09-g(9.8).txt") timex = [] timey = [] timez = [] for line in f: list = line.split(' ') timex.append((float(list[0]), float(list[1]))) timey.append((float(list[0]), float(list[2]))) drawing = Drawing(400,600) max_time, _ = timex[len(timex)-1] _, max_x = timex[len(timex)-1] lineplot_x = LinePlot() lineplot_x.x = max_time+1 ##lineplot_x.x = 50 lineplot_x.y = max_x+1 ##lineplot_x.y = 50 lineplot_x.height = 125 lineplot_x.width = 300 lineplot_x.data = [timex] drawing.add(lineplot_x) _, max_y = timey[len(timey)-1] lineplot_y = LinePlot() lineplot_y.x = max_time+1 lineplot_y.y = max_y+1 lineplot_y.height = 125 lineplot_y.width = 300 lineplot_y.data = [timey] ##drawing.add(lineplot_y) ## renderPDF.drawToFile(drawing, 'XVal1VsTime-2004-01-09-g(9.8).pdf', 'XvsTime') ## _, max_y = timex[len(timey)-1] ## lineplot_y = LinePlot() ##write data to files file_x = file("xpos.txt", 'w') for item in timex: str = item.__str__() str = str.replace('(', '') str = str.replace(')', '') str = str.replace(',', '') file_x.write(str + '\n') file_y = file("ypos.txt", 'w') for item in timey: str = item.__str__() str = str.replace('(', '') str = str.replace(')', '') str = str.replace(',', '') file_y.write(str + '\n')
def line_plot_demo(): d = Drawing(400, 400) line = LinePlot() line.x = 50 line.y = 85 line.height = 150 line.width = 250 line.lineLabelFormat = '%2.0f' data = [((1, 1), (2, 2), (2.5, 1), (3, 3), (4, 5)), ((1, 2), (2, 3), (2.5, 2), (3.5, 5), (4, 6))] line.data = data line.lines[0].strokeColor = colors.green line.lines[1].strokeColor = colors.blue line.lines[0].strokeWidth = 3 line.lines[0].symbol = makeMarker('Circle') line.lines[1].symbol = makeMarker('Hexagon') line.xValueAxis.valueMin = 0 line.xValueAxis.valueMax = 10 line.xValueAxis.valueSteps = [1, 2, 4] line.xValueAxis.labelTextFormat = '%2.1f' line.yValueAxis.valueMin = 0 line.yValueAxis.valueMax = 12 d.add(line, '') d.save(formats=['pdf'], outDir='.', fnRoot='line_plot_demo')
def _draw_scatter_plot(self, cur_drawing, x_start, y_start, x_end, y_end): """Draw a scatter plot on the drawing with the given coordinates.""" scatter_plot = LinePlot() # set the dimensions of the scatter plot scatter_plot.x = x_start scatter_plot.y = y_start scatter_plot.width = abs(x_start - x_end) scatter_plot.height = abs(y_start - y_end) scatter_plot.data = self.display_info scatter_plot.joinedLines = 0 # set the axes of the plot x_min, x_max, y_min, y_max = self._find_min_max(self.display_info) scatter_plot.xValueAxis.valueMin = x_min scatter_plot.xValueAxis.valueMax = x_max scatter_plot.xValueAxis.valueStep = (x_max - x_min) / 10.0 scatter_plot.yValueAxis.valueMin = y_min scatter_plot.yValueAxis.valueMax = y_max scatter_plot.yValueAxis.valueStep = (y_max - y_min) / 10.0 self._set_colors_and_shapes(scatter_plot, self.display_info) cur_drawing.add(scatter_plot)
def getHumPlot(): drawing = Drawing(400, 200) humedad = [getHumedad()] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = humedad ydlabel = Label() ydlabel.setText("Humedad (%)") ydlabel.angle = 90 ydlabel.setOrigin(20, 120) lp.joinedLines = 2 lp.lines[0].symbol = makeMarker('Circle') lp.lines[0].strokeColor = colors.blue lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 30 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 100 #lp.xValueAxis.visible=False #lp.yValueAxis.visible=False #Hide 2nd plot its Yaxis drawing.add(lp) drawing.add(ydlabel) drawing.add(String(130, 200, "Gráfico de humedad", fontSize=16)) return drawing
def sample9c(): lp = LinePlot() lp.yValueAxis = LogYValueAxis() lp.x += 20 lp.y += 20 lp.height = 250 lp.width = 350 data = [[(i, float(i)**2.) for i in range(10, 1001, 10)], ] data.append([(i, float(i)**3.) for i in range(10, 1001, 10)]) data.append([(i, float(i)**1.6) for i in range(10, 1001, 10)]) lp.data = data lp.lines.strokeWidth = .2 lp.lines[0].strokeColor = colors.red lp.lines[1].strokeColor = colors.blue lp.lines[2].strokeColor = colors.green lp.xValueAxis.visibleGrid = 1 lp.xValueAxis.gridStrokeDashArray = [1, 1] lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.visibleSubTicks = 1 lp.yValueAxis.visibleSubGrid = 1 lp.yValueAxis.subTickNum = 4 lp.yValueAxis.gridStrokeDashArray = [.3, 1] lp.yValueAxis.subGridStrokeDashArray = [.15, 1] drawing = Drawing(400,300) drawing.add(lp) return drawing
def line_plot(O, xy_max, data, label_font_size): if (reportlab is None): return from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker from reportlab.lib import colors lp = LinePlot() lp.x = 40 lp.y = 40 lp.height = 120 lp.width = 120 lp.data = [[(0, 0), (xy_max, xy_max)], data] lp.lines[0].strokeColor = colors.Color(*[0.8] * 3) lp.lines[0].strokeWidth = 0.5 lp.lines[1].strokeColor = colors.white lp.lines[1].strokeWidth = 0 lp.lines[1].symbol = makeMarker("Circle") lp.lines[1].symbol.strokeWidth = 0.5 lp.joinedLines = 1 lp.strokeColor = colors.Color(*[0.8] * 3) lp.strokeWidth = 1 lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = xy_max lp.xValueAxis.valueSteps = range(xy_max + 1) lp.xValueAxis.strokeWidth = 1 lp.xValueAxis.tickDown = 3 lp.xValueAxis.labels.fontSize = label_font_size lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = xy_max lp.yValueAxis.valueSteps = range(xy_max + 1) lp.yValueAxis.strokeWidth = 1 lp.yValueAxis.tickLeft = 3 lp.yValueAxis.labels.fontSize = label_font_size return lp
def _draw_scatter_plot(self, cur_drawing, x_start, y_start, x_end, y_end): """Draw a scatter plot on the drawing with the given coordinates.""" scatter_plot = LinePlot() # set the dimensions of the scatter plot scatter_plot.x = x_start scatter_plot.y = y_start scatter_plot.width = abs(x_start - x_end) scatter_plot.height = abs(y_start - y_end) scatter_plot.data = self.display_info scatter_plot.joinedLines = 0 # set the axes of the plot x_min, x_max, y_min, y_max = self._find_min_max(self.display_info) scatter_plot.xValueAxis.valueMin = x_min scatter_plot.xValueAxis.valueMax = x_max scatter_plot.xValueAxis.valueStep = (x_max - x_min) / 10.0 scatter_plot.yValueAxis.valueMin = y_min scatter_plot.yValueAxis.valueMax = y_max scatter_plot.yValueAxis.valueStep = (y_max - y_min) / 10.0 self._set_colors_and_shapes(scatter_plot, self.display_info) cur_drawing.add(scatter_plot)
def test03(): # 最终太阳黑子图形程序 from urllib import urlopen from reportlab.graphics.shapes import * from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.charts.textlabels import Label from reportlab.graphics import renderPDF URL = "http://services.swpc.noaa.gov/text/predicted-sunspot-radio-flux.txt" COMMENT_CHARS = "#:" drawing = Drawing(400, 200) data = [] for line in urlopen(URL).readlines(): if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1] / 12.0 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, pred), zip(times, high), zip(times, low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(250, 150, "Sunsports", fontSize=14, fillColor=colors.red)) renderPDF.drawToFile(drawing, "report2.pdf", "Sunsports")
def main(): URL = 'http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt' COMMENT_CHARS = '#:' drawing = Drawing(400, 200) data = [] for line in urlopen(URL).readlines(): if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1] / 12.0 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, pred), zip(times, high), zip(times, low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(250, 150, 'Sunspots', fontSize=14, fillColor=colors.red)) renderPDF.drawToFile(drawing, 'report.pdf', 'Sunspots')
def makePlotChart(self, context, width, height, data, xvalues, linecolors): content = [] drawing = Drawing(width, height) plot = LinePlot() plot.x = 0 plot.y = self.padding plot.height = height - 2 * self.padding plot.width = width plot.data = data plot.joinedLines = 1 plot.lineLabelFormat = '%2.0f' i = 0 for color in linecolors : plot.lines[i].strokeColor = colors.HexColor(color) i+=1 if xvalues : plot.xValueAxis.valueSteps = xvalues drawing.add(plot) content.append( drawing ) return content
def sample9b(): lp = LinePlot() lp.yValueAxis = LogYValueAxis() lp.x += 20 lp.y += 20 lp.height = 250 lp.width = 350 data = [ [(i, float(i)**2.) for i in range(10, 1001, 10)], ] data.append([(i, float(i)**3.) for i in range(10, 1001, 10)]) data.append([(i, float(i)**1.6) for i in range(10, 1001, 10)]) lp.data = data lp.lines.strokeWidth = .2 lp.lines[0].strokeColor = colors.red lp.lines[1].strokeColor = colors.blue lp.lines[2].strokeColor = colors.green lp.xValueAxis.visibleGrid = 1 lp.xValueAxis.gridStrokeDashArray = [1, 1] lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.visibleSubTicks = 1 lp.yValueAxis.visibleSubGrid = 1 lp.yValueAxis.gridStrokeDashArray = [1, 1] lp.yValueAxis.subGridStrokeDashArray = [1, 1] drawing = Drawing(400, 300) drawing.add(lp) return drawing
def getLineChartWithMarkers(): data = [((2, 3), (3, 2), (5, 3)), ((2, 6), (3, 4), (4, 3), (5, 1))] chart = LinePlot() chart.data = data chart.x = 5 chart.y = 5 chart.width = 240 chart.height = 100 chart.fillColor = colors.yellowgreen chart.lines[0].strokeWidth = 3.5 chart.lines[1].strokeWidth = 1 chart.lines[0].strokeColor = colors.brown chart.xValueAxis.valueMin = 1 chart.xValueAxis.valueMax = 6 chart.yValueAxis.valueMin = 1 chart.yValueAxis.valueMax = 7 chart.lines[0].symbol = makeMarker('Diamond') chart.lines[0].symbol.fillColor = colors.pink chart.lines[1].symbol = makeMarker( 'EU_Flag', # 'Triangle', fillColor=colors.red) title = String(50, 110, 'Line Plot Chart', fontSize=14) drawing = Drawing(240, 120) drawing.add(title) drawing.add(chart) return drawing
def line_plot(final_dis_angle): drawing = Drawing() data = [final_dis_angle] lp = LinePlot() lp.x = 0 lp.y = -120 lp.height = 300 lp.width = 450 lp.data = data lp.joinedLines = 0 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black # lp.xValueAxis.valueMin = 0 # lp.xValueAxis.valueMax = 5 # lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' # lp.yValueAxis.valueMin = 0 # lp.yValueAxis.valueMax = 7 # lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) return drawing
def drawing_chinese(): from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.charts.textlabels import Label from reportlab.graphics import renderPDF from reportlab.graphics.widgets.markers import makeMarker data = [((1, 100), (2, 200), (3, 300), (4, 400), (5, 500)), ((1, 50), (2, 80), (3, 400), (4, 40), (5, 70))] drawing = Drawing(500, 300) lp = LinePlot() lp.x = 50 #������������ lp.y = 30 lp.height = 250 lp.width = 400 lp.data = data lp.joinedLines = 1 lp.lines.symbol = makeMarker('FilledCircle') lp.xValueAxis.valueMin = 1 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueStep = 1 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 500 lp.yValueAxis.valueStep = 100 drawing.add(lp) title = Label() #����Ҫ��ʾ���ģ���Ҫ��ע��һ���������� title.fontName = "msyh" title.fontSize = 12 title_text = u'你好吗' #title_text = "abc" title._text = title_text title.x = 250 title.y = 280 title.textAnchor = 'middle' drawing.add(title) Xlabel = Label() Xlabel._text = 'x' Xlabel.fontSize = 12 Xlabel.x = 480 Xlabel.y = 30 Xlabel.textAnchor = 'middle' drawing.add(Xlabel) Ylabel = Label() Ylabel._text = "y" Ylabel.fontSize = 12 Ylabel.x = 40 Ylabel.y = 295 Ylabel.textAnchor = 'middle' drawing.add(Ylabel) try: drawing.save(formats=['gif'], outDir=".", fnRoot="abc") except: import traceback traceback.print_exc()
def add_linePlotChart(self, title, data, size=(PAGE_WIDTH-100, 300)): __chart_width, __chart_heigh = size[0], size[1] __draw = Drawing(__chart_width, __chart_heigh) __draw.add(String(20, __chart_heigh-10, title, fontName="chsFont",fontSize=18, fillColor=colors.black)) #LinePlot基本属性 lp = LinePlot() lp.x, lp.y = 25, 50 lp.width, lp.height = __chart_width-50, __chart_heigh-100 lp.data = data lp.joinedLines = 1 #X轴配置 lp.xValueAxis.valueMin = min([x[0] for x in data[0]]) lp.xValueAxis.valueMax = max([x[0] for x in data[0]]) valueRange = lp.xValueAxis.valueMax - lp.xValueAxis.valueMin lp.xValueAxis.valueStep = valueRange / 10.0 #Y轴配置 yValueMin = min([x[1] for x in data[0]]) yValueMax = max([x[1] for x in data[0]]) yValueRange = yValueMax - yValueMin if (yValueMin-yValueRange/2) > 0: lp.yValueAxis.valueMin = yValueMin - yValueRange/2 else: lp.yValueAxis.valueMin = yValueMin lp.yValueAxis.valueMax = yValueMax+ 0.01 + yValueRange/3 #+1避免当y轴最大值和最小值相等时valuseStep为0,导致绘图库计算y轴格数时出现除零错误 lp.yValueAxis.valueStep = (lp.yValueAxis.valueMax - lp.yValueAxis.valueMin)/10 lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.gridStrokeWidth = 0.5 lp.yValueAxis.gridStrokeColor = colors.gray __draw.add(lp) self.__content.append(__draw)
def line_plot(O, xy_max, data, label_font_size): if (reportlab is None): return from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker from reportlab.lib import colors lp = LinePlot() lp.x = 40 lp.y = 40 lp.height = 120 lp.width = 120 lp.data = [[(0,0),(xy_max,xy_max)], data] lp.lines[0].strokeColor = colors.Color(*[0.8]*3) lp.lines[0].strokeWidth = 0.5 lp.lines[1].strokeColor = colors.white lp.lines[1].strokeWidth = 0 lp.lines[1].symbol = makeMarker("Circle") lp.lines[1].symbol.strokeWidth = 0.5 lp.joinedLines = 1 lp.strokeColor = colors.Color(*[0.8]*3) lp.strokeWidth = 1 lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = xy_max lp.xValueAxis.valueSteps = range(xy_max+1) lp.xValueAxis.strokeWidth = 1 lp.xValueAxis.tickDown = 3 lp.xValueAxis.labels.fontSize = label_font_size lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = xy_max lp.yValueAxis.valueSteps = range(xy_max+1) lp.yValueAxis.strokeWidth = 1 lp.yValueAxis.tickLeft = 3 lp.yValueAxis.labels.fontSize = label_font_size return lp
def main(): URL = 'http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt' COMMENT_CHARS = '#:' drawing = Drawing(400, 200) data = [] for line in urlopen(URL).readlines(): if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1]/12.0 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, pred), zip(times, high), zip(times, low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(250, 150, 'Sunspots', fontSize = 14, fillColor = colors.red)) renderPDF.drawToFile(drawing, 'report.pdf', 'Sunspots')
def draw(): ''' data=[(2007,8,113.2,114.2,112.2), (2007,9,112.8,115.8,109.8), (2007,10,111.0,116.0,106.0), (2007,11,109.8,116.8,102.8), (2007,12,107.3,115.3,99.3), (2008,1,105.2,114.2,96.2), (2008,2,104.1,114.1,94.1), (2008,3,99.9,110.9,88.9), (2008,4,94.8,106.8,82.8), (2008,5,91.2,104.2,78.2)] ''' ''' #这个是在pdf里画一个 hello word 的例子, d=Drawing(100,100) s=String(50,50,"hello word",textAnchor="middle") d.add(s) renderPDF.drawToFile(d,"hello.pdf","A simple PDF file")#renderPDF.drawToFile调用后会把你的pdf文件存到当前目录下一个叫hello.pdf的文件中 ''' URL="http://www.swpc.noaa.gov/ftpdir/weekly/Predict.txt"#见364页,这个网址记录的是太阳黑子的全部数据 COMMENT_CHARS="#:" drawing=Drawing(400,200) data=[] for line in urlopen(URL).readlines(): #not isspace()是判断 这一行不为空字符串,not line[0] in COMMENT_CHARS是说 在网页里去掉 # 和 . 的部分 if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) #print data pred=[row[2] for row in data] high=[row[3] for row in data] low=[row[4] for row in data] times=[row[0]+row[1]/12.0 for row in data] lp=LinePlot() #设置 x,y,height,width,以及data lp.x=50 lp.y=50 lp.height=125 lp.width=300 lp.data=[zip(times,pred),zip(times,high),zip(times,low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green ''' drawing.add(PolyLine(zip(times,pred),storkeColor=colors.blue)) drawing.add(PolyLine(zip(times,high),storkeColor=colors.red)) drawing.add(PolyLine(zip(times,low),storkeColor=colors.green)) #drawing.add(PolyLine([(10,50),(100,50),(80,80)],storkeColor=colors.red))#这个是直接画一条线 ''' drawing.add(lp) drawing.add(String(250,150,"SunSpots",fontSize=14,fillColor=colors.red)) renderPDF.drawToFile(drawing,"report.pdf","SunSpots")#renderPDF.drawToFile调用后会把你的pdf文件存到当前目录下一个叫report.pdf的文件中
def draw_recent_week_pdf(filename, data_list): """ 画最近七天的流量计报表 :param filename: :param data_list :return: """ data = [] max_val = 0 for index in range(0, len(data_list)): data.append((index + 1, data_list[index])) max_val = max(max_val, data_list[index]) drawing = Drawing(500, 800) lp = LinePlot() lp.x = 50 lp.y = 80 lp.height = 600 lp.width = 400 lp.data = [data] lp.joinedLines = 1 lp.lines.symbol = makeMarker('FilledCircle') lp.xValueAxis.valueMin = 1 lp.xValueAxis.valueMax = 7 lp.xValueAxis.valueStep = 1 lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = (int(max_val / 100) + 1) * 100 lp.yValueAxis.valueStep = 100 drawing.add(lp) x_title = Label() # 若需要显示中文,需要先注册一个中文字体 pdfmetrics.registerFont(ttfonts.TTFont("haha", "simsun.ttc")) x_title.fontName = "haha" x_title.fontSize = 12 title_text = '用气量' x_title._text = title_text x_title.x = 20 x_title.y = 100 x_title.textAnchor = 'middle' drawing.add(x_title) y_title = Label() # 若需要显示中文,需要先注册一个中文字体 pdfmetrics.registerFont(ttfonts.TTFont("haha", "simsun.ttc")) y_title.fontName = "haha" y_title.fontSize = 12 title_text = '最近七天' y_title._text = title_text y_title.x = 80 y_title.y = 50 y_title.textAnchor = 'middle' drawing.add(y_title) drawing.save(formats=['pdf'], outDir=TMP_FILE_DIRECTORY_PATH, fnRoot=filename)
def drawline(self,width,height,*args): drawing=Drawing(width,height) ab=LinePlot() ab.x=180 ab.y=0 ab.height=200 ab.width=420 ab.xValueAxis._valueMin = 0 ab.yValueAxis._valueMin=0 ab.joinedLines=1 ab.data=[args] ab.lines[0].strokeColor=colors.red drawing.add(ab) return drawing
def addElectricPrice(canvas_param, pos_x, pos_y, width, height): # 电价数据 data = electricityPriceData # 定义各曲线标签 # data_name = ['一般工商业电价(1-10千伏)', '大工业电价(1-10千伏)', '一般工商业电价(35-110千伏)', '大工业电价(35-110千伏)'] data_name = ['一般工商业电价(35-110千伏)'] c = canvas_param # c.setFont("song", 10) drawing = Drawing(width=width, height=height) lp = LinePlot() # lp.x = 50 # lp.y = 50 lp.height = height lp.width = width lp.data = data lp.joinedLines = 1 # 定义各曲线颜色 lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.darkgreen lp.lines[3].strokeColor = colors.black for i in range(0, len(data)): lp.lines[i].name = data_name[i] # lp.lines[i].symbol = makeMarker('FilledCircle', size=0.5) lp.lines[i].strokeWidth = 1 # lp.lineLabelFormat = '%2.0f' # lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 24 lp.xValueAxis.valueSteps = [n for n in range(0, 24, 1)] lp.xValueAxis.labelTextFormat = lambda x: str(x) lp.yValueAxis.valueMin = 0 # lp.yValueAxis.valueMax = 50 # lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) add_legend(draw_obj=drawing, chart=lp, pos_x=10, pos_y=-10) # 将画布添加到pdf中 renderPDF.draw(drawing=drawing, canvas=c, x=pos_x, y=pos_y) return c
def MakePDF(times, list, reportname, pdfname): drawing = Drawing(500, 300) lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, list)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(350, 150, reportname, fontSize=14, fillColor=colors.red)) renderPDF.drawToFile(drawing, pdfname, reportname)
def drawrelationshipcs(can, resultsbuffer): can.setFont("Helvetica", 24) sec_title = "System Heat Balance" can.drawString(25, 750, sec_title) desc_text = "The following figure shows the relationship between the chilled water" \ " system operating efficiency and the cooling load. As the figure shows, with " \ "the Cooling load ranges between 800 RT to 1100 RT, the efficiency hovers between " \ "0.75/RT to 0.91KW/RT." stylesheet = getSampleStyleSheet() paragraph = Paragraph(desc_text, stylesheet['Normal']) aW, aH = 500, 600 w, h = paragraph.wrap(aW, aH) if w <= aW and h <= aH: paragraph.drawOn(can, 25, 700) drawing = Drawing(600, 400) data = [((801, 0.7), (903, 0.8), (799, 0.84), (1002, 0.97), (1101, 0.89)), ((987, 0.98), (1007, 1.1), (1102, 0.98), (987, 0.95), (908, 0.89))] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 250 lp.width = 400 lp.data = data lp.joinedLines = 0 lp.lines.symbol = makeMarker('FilledCircle') # lp.lines.symbol = makeMarker('Circle') # lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 1200 lp.xValueAxis.valueSteps = [ 0.00, 200.00, 400.00, 600.00, 800.00, 1000.00, 1200.00 ] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 1.2 lp.yValueAxis.valueSteps = [ 0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2 ] drawing.add(lp) drawing.drawOn(can, 50, 350) can.showPage()
def getLp(reportDict,init_num,height): lp = LinePlot() lp.x = 100 lp.y = height-(200*(init_num+1)) lp.height = 125 lp.width = 600 lp.data = [] lp.lines[0].strokeColor = colors.blue lst=[] infile=reportDict[0] with open(infile,'r') as f: for line in f.readlines(): line_lst=line.split('\t') lst_time=int(line_lst[0]) lst_data=int(line_lst[1]) lst.append((lst_time,lst_data)) lp.data.append(lst) return lp
def sample9a(): lp = LinePlot() lp.yValueAxis = LogYValueAxis() lp.x += 20 lp.y += 20 data = [[(i, float(i)**2.) for i in range(10, 1001, 10)], ] data.append([(i, float(i)**3.) for i in range(10, 1001, 10)]) data.append([(i, float(i)**1.6) for i in range(10, 1001, 10)]) lp.data = data lp.lines.strokeWidth = .2 lp.lines[0].strokeColor = colors.red lp.lines[1].strokeColor = colors.blue lp.lines[2].strokeColor = colors.green drawing = Drawing(400,200) drawing.add(lp) return drawing
def render_graph(self, request_opts, graph_opts): def label_fmt(x): print "@@@", x return str(x) ld = len(graph_opts["data"]) palette = [Color(*x) for x in get_float_pallete(ld)] w = graph_opts["width"] h = graph_opts["height"] drawing = Drawing(w, h) # Legend legend = LineLegend() legend.colorNamePairs = [ (palette[i], graph_opts["data"][i].name) for i in range(ld) ] legend.boxAnchor = "sw" legend.columnMaximum = 2 legend.alignment = "right" drawing.add(legend) lh = legend._calcHeight() + self.X_PADDING / 2 # Plot lp = LinePlot() lfs = lp.xValueAxis.labels.fontSize lp.x = self.X_PADDING lp.y = self.Y_PADDING + lh + lfs lp.width = w - 2 * self.X_PADDING lp.height = h - self.Y_PADDING - lp.y lp.data = [ [(t, v) for v, t in ts] for ts in graph_opts["data"] ] for i in range(ld): lp.lines[i].strokeColor = palette[i] drawing.add(lp) # Render cdata = drawing.asString(format="png") response = self.render_plain_text( cdata, mimetype="image/png" ) if not request_opts["noCache"]: cache.set(request_opts["requestKey"], response, request_opts["cacheTimeout"]) return response
def getLp(reportDict, init_num, height, mode): lp = LinePlot() lp.x = 100 lp.y = height - 300 * (init_num + 1) lp.height = 200 lp.width = 400 if mode == 'used': lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 100 lp.yValueAxis.valueSteps = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100] elif mode == 'mem': lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 24000 lp.yValueAxis.valueSteps = [ 2000, 4000, 6000, 8000, 10000, 12000, 14000, 16000, 18000, 20000, 22000, 24000 ] lp.data = [] lp.lines[0].strokeColor = colors.blue lst = [] lst_sum = [] xValue = [] infile = reportDict[0] with open(infile, 'r') as f: for line in f.readlines(): line_lst = line.split('\t') lst_time = float(line_lst[0]) xValue.append(lst_time) lst_data = float(line_lst[1]) lst_sum.append(lst_data) lst.append((lst_time, lst_data)) lp.data.append(lst) avgData = round(sum(lst_sum) / len(lst_sum), 2) lp.xValueAxis.valueMin = xValue[0] lp.xValueAxis.valueMax = int(xValue[-1]) + 1 lp.xValueAxis.valueSteps = range(0, int(xValue[-1]) + 2) result = [] result.append(lp) result.append(avgData) return result
def test_23_linePlotCharts(self): from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib import colors from reportlab.lib.units import inch from reportlab.platypus import SimpleDocTemplate, Spacer, Paragraph from reportlab.pdfbase import pdfmetrics from reportlab.graphics.shapes import Drawing from reportlab.pdfbase.ttfonts import TTFont from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker pdfmetrics.registerFont(TTFont('chsFont', 'STHeiti Light.ttc')) stylesheet = getSampleStyleSheet() elements = [] doc = SimpleDocTemplate("demo.pdf") elements.append( Paragraph('<font name="chsFont">JY.zenist.song - 俊毅</font>', stylesheet['Title'])) elements.append(Spacer(1, 1 * inch)) d = Drawing(400, 200) data = [ [(1, 1), (2, 2), (2.5, 1), (3, 3), (4, 5)], ] lp = LinePlot() lp.x = 5 lp.y = 5 lp.height = 190 lp.width = 390 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') d.add(lp) elements.append(d) doc.build(elements)
def draw_lines(data, height=125, width=220, use_colors=[]): lp = LinePlot() ''' title = Label() title.fontName = "song" title.fontSize = 12 title_text = "ceshi" title._text = title_text ''' lp.x = 50 #坐标轴中心坐标 lp.y = 50 lp.height = height lp.width = width thex = data.iloc[:, 0].tolist() datalist = [] for lines in range(len(data.columns) - 1): datalist.append(list(zip(thex, data.iloc[:, lines + 1].tolist()))) lp.data = datalist if use_colors != []: for i, col in enumerate(use_colors): lp.lines[i].strokeColor = col return lp
def graphout(name, datain,xaxis=None): if xaxis is None: xaxis=range(datain.size) if xlabel is None: xlabel = '' if ylabel is None: ylabel = '' drawing = Drawing(400, 200) # data = [ # ((1,1), (2,2), (2.5,1), (3,3), (4,5)), # ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) # ] dataview = [tuple([(xaxis[i],datain[i]) for i in range(datain.size)])] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = dataview lp.xValueAxis.xLabelFormat = '{mmm} {yy}' lp.lineLabels.fontSize = 6 lp.lineLabels.boxStrokeWidth = 0.5 lp.lineLabels.visible = 1 lp.lineLabels.boxAnchor = 'c' # lp.joinedLines = 1 # lp.lines[0].symbol = makeMarker('FilledCircle') # lp.lines[1].symbol = makeMarker('Circle') # lp.lineLabelFormat = '%2.0f' # lp.strokeColor = colors.black # lp.xValueAxis.valueMin = min(xaxis) # lp.xValueAxis.valueMax = max(xaxis) # lp.xValueAxis.valueSteps = xaxis # lp.xValueAxis.labelTextFormat = '%2.1f' # lp.yValueAxis.valueMin = min(datain) # lp.yValueAxis.valueMax = max(datain) # lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) return drawing
def line_plot(data, elements): drawing = Drawing(0, 400) # for indices lp = LinePlot() lp.x = 0 lp.y = 50 lp.height = 300 lp.width = 600 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) elements.append(drawing)
def genLinePlot(objLogFileReader, columnName): """生成单个测试场景Log数据的指定数值列的折线图""" plotWidth, plotHeight = 500, 180 d = Drawing(plotWidth, plotHeight) title = columnName d.add( String(0, plotHeight - 10, title, fontSize=12, fillColor=colors.black)) data = objLogFileReader.getLinePlotData(columnName) lp = LinePlot() lp.x, lp.y = 50, 25 lp.width, lp.height = plotWidth - 50, plotHeight - 50 lp.data = data lp.joinedLines = 1 lp.lines[0].strokeColor = colors.blue lp.lines[0].strokeWidth = 1 #设置图表x轴的标尺步长、数据标签文本格式等属性 lp.xValueAxis.valueMin = min([x[0] for x in data[0]]) lp.xValueAxis.valueMax = max([x[0] for x in data[0]]) xValueRange = lp.xValueAxis.valueMax - lp.xValueAxis.valueMin lp.xValueAxis.valueStep = xValueRange / 10.0 lp.xValueAxis.labelTextFormat = myUtil.seconds2Str #设置图表y轴的标尺步长、数据标签文本格式等属性 yValueMin = min([x[1] for x in data[0]]) yValueMax = max([x[1] for x in data[0]]) yValueRange = yValueMax - yValueMin if (yValueMin - yValueRange / 2) > 0: lp.yValueAxis.valueMin = yValueMin - yValueRange / 2 else: lp.yValueAxis.valueMin = yValueMin lp.yValueAxis.valueMax = yValueMax + 0.01 + yValueRange / 3 #+1避免当y轴最大值和最小值相等时valuseStep为0,导致绘图库计算y轴格数时出现除零错误 lp.yValueAxis.valueStep = (lp.yValueAxis.valueMax - lp.yValueAxis.valueMin) / 10 lp.yValueAxis.labelTextFormat = '%.2f' lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.gridStrokeWidth = 0.5 lp.yValueAxis.gridStrokeColor = colors.gray d.add(lp) return d
def add_linePlotChart(self, title, data, size=(PAGE_WIDTH - 100, 300)): __chart_width, __chart_heigh = size[0], size[1] __draw = Drawing(__chart_width, __chart_heigh) __draw.add( String(20, __chart_heigh - 10, title, fontName="chsFont", fontSize=18, fillColor=colors.black)) #LinePlot基本属性 lp = LinePlot() lp.x, lp.y = 25, 50 lp.width, lp.height = __chart_width - 50, __chart_heigh - 100 lp.data = data lp.joinedLines = 1 #X轴配置 lp.xValueAxis.valueMin = min([x[0] for x in data[0]]) lp.xValueAxis.valueMax = max([x[0] for x in data[0]]) valueRange = lp.xValueAxis.valueMax - lp.xValueAxis.valueMin lp.xValueAxis.valueStep = valueRange / 10.0 #Y轴配置 yValueMin = min([x[1] for x in data[0]]) yValueMax = max([x[1] for x in data[0]]) yValueRange = yValueMax - yValueMin if (yValueMin - yValueRange / 2) > 0: lp.yValueAxis.valueMin = yValueMin - yValueRange / 2 else: lp.yValueAxis.valueMin = yValueMin lp.yValueAxis.valueMax = yValueMax + 0.01 + yValueRange / 3 #+1避免当y轴最大值和最小值相等时valuseStep为0,导致绘图库计算y轴格数时出现除零错误 lp.yValueAxis.valueStep = (lp.yValueAxis.valueMax - lp.yValueAxis.valueMin) / 10 lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.gridStrokeWidth = 0.5 lp.yValueAxis.gridStrokeColor = colors.gray __draw.add(lp) self.__content.append(__draw)
def draw_line(self, line_data, *args, **kw): drawing = Drawing(400, 200) lp = LinePlot() lp.x = 30 lp.y = -20 lp.height = 200 lp.width = 400 lp.data = line_data lp.xValueAxis.labels.fontName = 'Helvetica' lp.xValueAxis.labels.fontSize = 7 lp.xValueAxis.forceZero = 0 lp.xValueAxis.avoidBoundFrac = 1 lp.xValueAxis.gridEnd = 115 lp.xValueAxis.tickDown = 3 lp.xValueAxis.labelTextFormat = lambda x: time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(int(x) / 1000)) lp.yValueAxis.tickLeft = 3 lp.yValueAxis.labels.fontName = 'Helvetica' lp.yValueAxis.labels.fontSize = 7 for i in range(len(line_data)): lp.lines[i].strokeColor = colors.toColor('hsl(%s,80%%,40%%)' % (i * 60)) drawing.add(lp) title = Label() title.fontName = 'Helvetica-Bold' title.fontSize = 14 title.x = 200 title.y = 180 title._text = 'Chart Title' title.maxWidth = 180 title.height = 20 title.textAnchor = 'middle' drawing.add(title) return drawing
def test_23_linePlotCharts(self): from reportlab.lib.styles import getSampleStyleSheet from reportlab.lib import colors from reportlab.lib.units import inch from reportlab.platypus import SimpleDocTemplate, Spacer, Paragraph from reportlab.pdfbase import pdfmetrics from reportlab.graphics.shapes import Drawing from reportlab.pdfbase.ttfonts import TTFont from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker pdfmetrics.registerFont(TTFont('chsFont', 'STHeiti Light.ttc')) stylesheet = getSampleStyleSheet() elements = [] doc = SimpleDocTemplate("demo.pdf") elements.append(Paragraph('<font name="chsFont">JY.zenist.song - 俊毅</font>', stylesheet['Title'])) elements.append(Spacer(1,1*inch)) d = Drawing(400,200) data = [ [(1,1), (2,2), (2.5,1), (3,3), (4,5)], ] lp = LinePlot() lp.x = 5 lp.y = 5 lp.height = 190 lp.width = 390 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') d.add(lp) elements.append(d) doc.build(elements)
def genLinePlot(objLogFileReader,columnName): """生成单个测试场景Log数据的指定数值列的折线图""" plotWidth,plotHeight = 500,180 d = Drawing(plotWidth,plotHeight) title = columnName d.add(String(0,plotHeight-10,title,fontSize=12,fillColor=colors.black)) data = objLogFileReader.getLinePlotData(columnName) lp = LinePlot() lp.x,lp.y = 50,25 lp.width,lp.height = plotWidth-50,plotHeight-50 lp.data = data lp.joinedLines = 1 lp.lines[0].strokeColor = colors.blue lp.lines[0].strokeWidth = 1 #设置图表x轴的标尺步长、数据标签文本格式等属性 lp.xValueAxis.valueMin = min([x[0] for x in data[0]]) lp.xValueAxis.valueMax = max([x[0] for x in data[0]]) xValueRange = lp.xValueAxis.valueMax - lp.xValueAxis.valueMin lp.xValueAxis.valueStep = xValueRange/10.0 lp.xValueAxis.labelTextFormat = myUtil.seconds2Str #设置图表y轴的标尺步长、数据标签文本格式等属性 yValueMin = min([x[1] for x in data[0]]) yValueMax = max([x[1] for x in data[0]]) yValueRange = yValueMax - yValueMin if (yValueMin-yValueRange/2) > 0: lp.yValueAxis.valueMin = yValueMin - yValueRange/2 else: lp.yValueAxis.valueMin = yValueMin lp.yValueAxis.valueMax = yValueMax+ 0.01 + yValueRange/3 #+1避免当y轴最大值和最小值相等时valuseStep为0,导致绘图库计算y轴格数时出现除零错误 lp.yValueAxis.valueStep = (lp.yValueAxis.valueMax - lp.yValueAxis.valueMin)/10 lp.yValueAxis.labelTextFormat = '%.2f' lp.yValueAxis.visibleGrid = 1 lp.yValueAxis.gridStrokeWidth = 0.5 lp.yValueAxis.gridStrokeColor = colors.gray d.add(lp) return d
def get_figure_drawing(input_data, x_margin, y_margin, width, height): time = np.arange(len(input_data)) prefix_sums = np.cumsum(input_data) # Data in needed for Drawing format (pairs array) data = [np.column_stack((time, prefix_sums))] data = [tuple(map(tuple, data[0]))] # Create drawing. drawing = Drawing() # Create graph. our_graph = LinePlot() our_graph.data = data our_graph.x = x_margin our_graph.y = y_margin our_graph.height = height our_graph.width = width drawing.add(our_graph) return drawing
def draw_report(): data = init_data() pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [(row[0] + row[1] / 12.0) for row in data] d = Drawing(400, 200) title = String(250, 180, 'Sunspots', fontsize=14, fillColor=colors.red) lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [ list(zip(times, pred)), list(zip(times, high)), list(zip(times, low)) ] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green d.add(title) d.add(lp) renderPDF.drawToFile(d, 'report.pdf', 'Sunspots')
# data.append([float(n) for n in line.split()]) addOne = [row[5] for row in data] pred = [row[2] for row in data] #第二列的数据作为预测值 high = [row[3] for row in data] #第三列的数据作为最高值 low = [row[4] for row in data] #第四列的数据作为最低值 times = [row[0] + row[1]/12.0 for row in data] #第一列的数据作为横坐标的时间 lp = LinePlot() #这里的x,y lp这个图像在我们drawing里面的起点坐标 lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 #下面里面的zip里面的数据显示在图标上。第一个是年份,第二个是数据量 lp.data = [zip(times, pred), zip(times, high), zip(times, low), zip(times, addOne)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green lp.lines[3].strokeColor = colors.black #这里就是画图,画到drawing上面去 drawing.add(lp) drawing.add(String(250, 150, 'Sunspots', fontSize = 14, fillColor = colors.red)) renderPDF.drawToFile(drawing, 'Graph.pdf', 'SunSpots')
pos_pers = [] neg_pers = [] nor_pos_pers = [] nor_neg_pers = [] for gc in gcs: gn = str(gc) gc_strs.append(gn) pos_pers.append((gc, round(data_dict[gn]['pos_per'], 2))) neg_pers.append((gc, round(data_dict[gn]['neg_per'], 2))) nor_pos_pers.append((gc, round(35.483870967741936, 2))) nor_neg_pers.append((gc, round(64.516129032258064, 2))) print gn, round(data_dict[gn]['pos_per']), round(data_dict[gn]['neg_per']) lp.data = [pos_pers, neg_pers, nor_pos_pers, nor_neg_pers] print lp.data lp.joinedLines = 1 lp.lines.symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.2f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 2100 lp.xValueAxis.labelTextFormat = '%2.0f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 100 lp.yValueAxis.valueStep = 10 xlbl = Label() xlbl.setText("No. of Genes")
if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) perd = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[1] for row in data] ''' perdzip, highzip, lowzip = list(zip(times, perd)), list( zip(times, high)), list(zip(times, low)) print(perdzip, highzip, lowzip)''' # print(data) lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = (list(zip(times, perd)), list( zip(times, high)), list(zip(times, low))) lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(65, 150, u'2008年Sunspots', fontSize=18, fillColor=colors.red)) renderPDF.drawToFile(drawing, 'test.pdf', 'A simple PDF file') '''s = String(50, 50, "wahaha!", textAnchor='middle') d.add(s) '''
def run(self): def weight_sort(a, b): return cmp(a.getWeight(), b.getWeight()) drawing = Drawing(600, 300) lc = LinePlot() # Determine axis dimensions and create data set maxval = 0 minval = 0 dimension_one_values = [] dimension_two_values = [] dimension_one_answeroptions_as_objects = [] dimension_two_answeroptions_as_objects = [] counter = 0 for question in self.getQuestions(): weights = [int(weight) for weight in question.getAnswerOptionsWeights()] answeroptions = list(question.getAnswerOptions()) # This is used by the legend. Sort on weight. if counter == 0: dimension_one_answeroptions_as_objects = question.getAnswerOptionsAsObjects() dimension_one_answeroptions_as_objects.sort(weight_sort) else: dimension_two_answeroptions_as_objects = question.getAnswerOptionsAsObjects() dimension_two_answeroptions_as_objects.sort(weight_sort) # Minmax lmin = min(weights) lmax = max(weights) if lmin < minval: minval = lmin if lmax > maxval: maxval = lmax # Data for user, answer in question.answers.items(): value = answer.get('value', None) weight = None if value is not None: # Lookup the integer weight of this answer if value in answeroptions: index = answeroptions.index(value) weight = weights[index] # Always add to the list. ReportLab deals with None. if counter == 0: dimension_one_values.append(weight) else: dimension_two_values.append(weight) counter += 1 # Set minmax absmax = max(abs(minval), abs(maxval)) * 1.1 lc.xValueAxis.valueMin = -absmax lc.xValueAxis.valueMax = absmax lc.yValueAxis.valueMin = -absmax lc.yValueAxis.valueMax = absmax # Zip to create data data = [zip(dimension_one_values, dimension_two_values)] if not len(data[0]): return lc.x = 0 lc.y = 0 # Misc setup lc.height = 300 lc.width = 300 lc.data = data lc.joinedLines = 0 lc.fillColor = None lc.lines[0].strokeColor = colors.red lc.lines[0].symbol = makeMarker('FilledCircle') # Add a grid grid = DoubleGrid() lc.background = grid setupGrid(lc) lc.background = None # Finetune the grid grid.grid0.strokeWidth = 0.2 grid.grid1.strokeWidth = 0.2 # Add to drawing else it overwrites the center Y axis drawing.add(grid) # Add a Y axis to pass through the origin yaxis = YValueAxis() yaxis.setPosition(lc.width/2, 0, lc.height) yaxis.configure([(0,-absmax),(0,absmax)]) yaxis.strokeColor = colors.blue drawing.add(yaxis) # Color X-Axis lc.xValueAxis.strokeColor = colors.green drawing.add(lc) # Legend for Dimension One drawing.add(String(lc.width+20, lc.height-12, 'Dimension One (X-Axis):', fontName='Helvetica', fontSize=12, fillColor=colors.green)) legend = Legend() legend.alignment = 'right' legend.x = lc.width + 20 legend.y = lc.height - 20 legend.fontName = 'Helvetica' legend.fontSize = 12 legend.columnMaximum = 7 items = [] for ob in dimension_one_answeroptions_as_objects: items.append( ( StringWidget(ob.getWeight()), ob() ) ) legend.colorNamePairs = items drawing.add(legend, 'legend1') # Legend for Dimension Two drawing.add(String(lc.width+20, lc.height/2-12, 'Dimension Two (Y-Axis):', fontName='Helvetica', fontSize=12, fillColor=colors.blue)) legend = Legend() legend.alignment = 'right' legend.x = lc.width + 20 legend.y = lc.height/2 - 20 legend.fontName = 'Helvetica' legend.fontSize = 12 legend.columnMaximum = 7 items = [] for ob in dimension_two_answeroptions_as_objects: items.append( ( StringWidget(ob.getWeight()), ob() ) ) legend.colorNamePairs = items drawing.add(legend, 'legend2') # Write out data = drawing.asString('png') request = self.REQUEST response = request.RESPONSE response.setHeader('Content-Type', 'image/png') response.setHeader('Content-Disposition','inline; filename=%s.png' % self.getId()) response.setHeader('Content-Length', len(data)) response.setHeader('Cache-Control', 's-maxage=0') return data
def makeSummary(self, stype): logger.debug('StartQT4::makeSummary(%s)' % stype) pinfo = self.imageViews[-1].getSummaryDemographics() if pinfo is None: return reportname = self.imageViews[-1].getReportName() + '.pdf' filename = QtGui.QFileDialog.getSaveFileName( self, directory=reportname, filter='PDF Files *.pdf(*.pdf);;All Files *(*)') #filename = QtGui.QFileDialog.getSaveFileName(self, filter='PDF Files *.pdf(*.pdf);;All Files *(*)') if len(filename) == 0: return doc = SimpleDocTemplate(str(filename), pagesize=A4, rightMargin=1.5 * cm, leftMargin=2 * cm, topMargin=2 * cm, bottomMargin=3 * cm) elements = [] #data = pinfo.items() for iv in self.imageViews: vt = iv.getVelocityText() if stype == 'BOTH' or stype == iv.getViewShortName(): pinfo.append(vt) t = Table(pinfo, rowHeights=12) t.setStyle( TableStyle([('BACKGROUND', (1, 1), (-2, -2), colors.green), ('TEXTCOLOR', (0, 0), (1, -1), colors.black), ('ALIGNMENT', (0, 0), (0, -1), 'RIGHT')])) elements.append(t) for iv in self.imageViews: if stype == 'BOTH' or stype == iv.getViewShortName(): drawing = Drawing(400, 280) cd = iv.getDataPointer() vt = iv.getVelocityText() pinfo.append(vt) #ydata = cd.getCOMYScaled(False, 'mm').tolist() ydata = cd.getCOMYScaled(True, 'mm').tolist() xPlaneFit = cd.getYPlaneFit(units='mm', bothAxes=True).tolist() vdata = cd.getVelocitySlopeScaled(units='mm', bothAxes=True) gdata = [ydata, xPlaneFit] if vdata is not None: gdata.append(vdata.tolist()) title = Label() title.setOrigin(150, 240) title.setText(iv.getViewName()) ylabel = Label() ylabel.setOrigin(0, 100) ylabel.angle = 90 ylabel.setText("Millimeters") xlabel = Label() xlabel.setOrigin(70, 0) xlabel.setText("Seconds") lp = LinePlot() lp.height = 230 lp.width = 400 lp.data = gdata lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green #lp.xValueAxis.xLabel = "Seconds" drawing.add(title) drawing.add(ylabel) drawing.add(xlabel) drawing.add(lp) elements.append(drawing) doc.build(elements, onFirstPage=self.pdfHeaderFooter, onLaterPages=self.pdfHeaderFooter)
for line in urlopen(URL).readlines(): if not line.isspace() and not line[0] in '#:': data.append([float(n) for n in line.split()]) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] rad_pred = [row[5] for row in data] rad_high = [row[6] for row in data] rad_low = [row[7] for row in data] times = [row[0] + row[1] / 12.0 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, pred), zip(times, high), zip(times, low), \ zip(times, rad_pred), zip(times, rad_high), zip(times, rad_low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green lp.lines[3].strokeColor = colors.yellow lp.lines[4].strokeColor = colors.black lp.lines[5].strokeColor = colors.brown drawing.add(lp) drawing.add(String(250, 150, 'Sunspots', fontSize = 14, fillColor = colors.red)) renderPDF.drawToFile(drawing, 'report2.pdf', 'Sunspots')
def make_graphs(self,canvas=None,left_margin=None):#text=None): from reportlab.graphics import renderPDF from reportlab.lib.pagesizes import letter from reportlab.graphics.shapes import Drawing,String from reportlab.graphics.charts.legends import Legend from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker from reportlab.lib import colors from reportlab.lib.units import inch #help(colors) self.framework = {4:dict(status=SpotClass.SPINDLE,color=colors.black), 5:dict(status=SpotClass.OVERLAP,color=colors.limegreen), 6:dict(status=SpotClass.OUTLIER,color=colors.greenyellow), 7:dict(status=SpotClass.ICE,color=colors.skyblue), } # set size and position width,height = letter #letter_landscape = (width,height) plot_dim = 3.0*inch # construct scatter plot plot_dxdy_pos = (left_margin*inch,height - plot_dim - 0.5*inch) plot_dxdy = LinePlot() plot_dxdy.data = self.plot_dxdy_data std_colors = {0:colors.darkred, 1:colors.red, 2:colors.salmon} for key in std_colors.keys(): plot_dxdy.lines[key].strokeColor = None plot_dxdy.lines[key].symbol = makeMarker('Circle') plot_dxdy.lines[key].symbol.strokeColor = None plot_dxdy.lines[key].symbol.fillColor = std_colors[key] plot_dxdy.lines[key].symbol.size = 1.2 for key in self.framework.keys(): plot_dxdy.lines[key].strokeColor = None plot_dxdy.lines[key].symbol = makeMarker('Circle') plot_dxdy.lines[key].symbol.strokeColor = None plot_dxdy.lines[key].symbol.fillColor = self.framework[key]["color"] plot_dxdy.lines[key].symbol.size = 1.2 plot_dxdy.lines[3].strokeColor = None plot_dxdy.lines[3].symbol = makeMarker('Circle') plot_dxdy.lines[3].symbol.strokeColor = colors.blue plot_dxdy.lines[3].symbol.fillColor = None plot_dxdy.lines[3].symbol.strokeWidth = 0.6 plot_dxdy.lines[3].symbol.size = plot_dim*(self.sqrtr2) #print plot_dxdy.lines[3].symbol.getProperties() plot_dxdy.width = plot_dim plot_dxdy.height = plot_dim plot_dxdy.xValueAxis.valueMax = 1.0 plot_dxdy.xValueAxis.valueMin = -1.0 plot_dxdy.xValueAxis.joinAxis = plot_dxdy.yValueAxis plot_dxdy.xValueAxis.joinAxisMode = 'value' plot_dxdy.xValueAxis.joinAxisPos = -1.0 plot_dxdy.yValueAxis.valueMax = 1.0 plot_dxdy.yValueAxis.valueMin = -1.0 d_dxdy = Drawing(plot_dim,plot_dim) d_dxdy.add(plot_dxdy) # construct cdf plot plot_cdf_pos = (left_margin*inch, height - 2.0*(plot_dim + 0.5*inch)) plot_cdf = LinePlot() plot_cdf.data = self.plot_cdf_data plot_cdf.lines[0].strokeColor = colors.blue for key in std_colors.keys(): plot_cdf.lines[key+1].strokeColor = None plot_cdf.lines[key+1].symbol = makeMarker('Circle') plot_cdf.lines[key+1].symbol.strokeColor = None plot_cdf.lines[key+1].symbol.fillColor = std_colors[key] plot_cdf.lines[key+1].symbol.size = 1.2 if (len(self.plot_cdf_data) == 5): plot_cdf.lines[4].strokeColor = colors.green plot_cdf.width = plot_dim plot_cdf.height = plot_dim plot_cdf.xValueAxis.valueMax = 1.0 plot_cdf.xValueAxis.valueMin = 0.0 plot_cdf.yValueAxis.valueMax = 1.0 plot_cdf.yValueAxis.valueMin = 0.0 d_cdf = Drawing(plot_dim,plot_dim) d_cdf.add(plot_cdf) # construct pdf plot plot_pdf_pos = (left_margin*inch, height - 3.0*(plot_dim + 0.5*inch)) plot_pdf = LinePlot() plot_pdf.data = self.plot_pdf_data plot_pdf.lines[1].strokeColor = colors.blue plot_pdf.lines[0].strokeColor = None plot_pdf.lines[0].symbol = makeMarker('Circle') plot_pdf.lines[0].symbol.strokeColor = colors.red plot_pdf.lines[0].symbol.size = 1 plot_pdf.width = plot_dim plot_pdf.height = plot_dim plot_pdf.xValueAxis.valueMax = 1.0 plot_pdf.xValueAxis.valueMin = 0.0 d_pdf = Drawing(2*plot_dim,plot_dim) d_pdf.add(plot_pdf) # add legend legend = Legend() legend.alignment = 'right' legend.colorNamePairs = [(std_colors[0],'Inliers (%d'%int(self.fraction*100.0) + '% used for fit)'), (std_colors[1],'Other inliers'), (std_colors[2],'Outliers, reject next round'),] for key in self.framework.keys(): legend.colorNamePairs.append( (self.framework[key]["color"], "%s"%self.framework[key]["status"] ) ) legend.x = plot_dim - 1.0*inch legend.y = plot_dim legend.columnMaximum = 8 d_pdf.add(legend) # add titles title_pos = (plot_dim/2.0,plot_dim + 0.25*inch) title_dxdy = String(title_pos[0],title_pos[1],'dx vs. dy (all)') title_dxdy.fontSize = 15 title_dxdy.textAnchor = 'middle' d_dxdy.add(title_dxdy) title_cdf = String(title_pos[0],title_pos[1],'cdf (good)') title_cdf.fontSize = 15 title_cdf.textAnchor = 'middle' d_cdf.add(title_cdf) title_pdf = String(title_pos[0],title_pos[1],'pdf (good)') title_pdf.fontSize = 15 title_pdf.textAnchor = 'middle' d_pdf.add(title_pdf) # draw everything renderPDF.draw(d_dxdy,canvas,plot_dxdy_pos[0],plot_dxdy_pos[1]) renderPDF.draw(d_cdf,canvas,plot_cdf_pos[0],plot_cdf_pos[1]) renderPDF.draw(d_pdf,canvas,plot_pdf_pos[0],plot_pdf_pos[1])
(2007, 9, 112.8, 115.8, 109.8), (2007, 10, 111.0, 116.0, 106.0), (2007, 11, 109.8, 116.8, 102.8), (2007, 12, 107.3, 115.3, 99.3), (2008, 1, 105.2, 114.2, 96.2), (2008, 2, 104.1, 114.1, 94.1), (2008, 3, 99.9, 110.9, 88.9), (2008, 4, 94.8, 106.8, 82.8), (2008, 5, 91.2, 104.2, 78.2), ] drawing = Drawing(400, 200) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1] / 12.0 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [zip(times, pred), zip(times, high), zip(times, low)] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(200, 180, 'Sunspots', fontSize = 14, fillColor = colors.red)) renderPDF.drawToFile(drawing, 'report2.pdf', 'Sunspots')
def addAcTemp(canvas_param, opc_df_today,pos_x, pos_y, width, height): total_df = opc_df_today # 取出 # “室外天气”、 # “冷却侧供水温度”、 # “冷却侧回水温度”、 # “冷冻侧供水温度”、 # “冷冻侧回水温度” total_df_OAT = total_df[total_df.browse_name == 'OA-T'] total_df_CSSWT = total_df[total_df.browse_name == 'CS-SWT'] total_df_CSRWT = total_df[total_df.browse_name == 'CS-RWT'] total_df_FSSWT = total_df[total_df.browse_name == 'FS-SWT'] total_df_FSRWT = total_df[total_df.browse_name == 'FS-RWT'] # 生成5个变量相应的点阵 data_OAT = ExtractPointFromDf_DateX(df_origin=total_df_OAT, date_col='present_value_source_timestamp', y_col='present_value_value') data_CSSWT = ExtractPointFromDf_DateX(df_origin=total_df_CSSWT, date_col='present_value_source_timestamp', y_col='present_value_value') data_CSRWT = ExtractPointFromDf_DateX(df_origin=total_df_CSRWT, date_col='present_value_source_timestamp', y_col='present_value_value') data_FSSWT = ExtractPointFromDf_DateX(df_origin=total_df_FSSWT, date_col='present_value_source_timestamp', y_col='present_value_value') data_FSRWT = ExtractPointFromDf_DateX(df_origin=total_df_FSRWT, date_col='present_value_source_timestamp', y_col='present_value_value') data_origin = [tuple(data_OAT), tuple(data_CSSWT), tuple(data_CSRWT), tuple(data_FSSWT), tuple(data_FSRWT)] # 定义各曲线标签 data_name_origin = ['室外温度', '冷却侧供水温度', '冷却侧回水温度', '冷冻侧供水温度', '冷冻侧回水温度'] # 处理某条线没有数据的情况,若不处理“没有数据”的情况,画线的时候会报错! data = [] data_name = [] for i in range(0, len(data_origin)): if len(data_origin[i]) != 0: data.append(data_origin[i]) data_name.append(data_name_origin[i]) if len(data) == 0: print('函数 addAcTemp:原始df解析后没有想要的温度数据!') return canvas_param c = canvas_param # c.setFont("song", 10) drawing = Drawing(width=width, height=height) lp = LinePlot() # lp.x = 50 # lp.y = 50 lp.height = height lp.width = width lp.data = data lp.joinedLines = 1 # 定义各曲线颜色 lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.lightgreen lp.lines[3].strokeColor = colors.orange lp.lines[4].strokeColor = colors.darkgreen for i in range(0, len(data)): lp.lines[i].name = data_name[i] lp.lines[i].symbol = makeMarker('FilledCircle', size=0.5) lp.lines[i].strokeWidth = 0.2 # lp.lineLabelFormat = '%2.0f' # lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 60*60*24 lp.xValueAxis.valueSteps = [n for n in range(0, 60*60*24, 60*60)] lp.xValueAxis.labelTextFormat = lambda x: str(s2t(x))[0:2] lp.yValueAxis.valueMin = 0 # lp.yValueAxis.valueMax = 50 # lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) add_legend(draw_obj=drawing, chart=lp, pos_x=10, pos_y=-10) renderPDF.draw(drawing=drawing, canvas=c, x=pos_x, y=pos_y)
from requests import * from yahoo_finance import Share import pandas as pd from pandas import DataFrame # As the data from swpc is not avaliable as in the book, so in this demo program, # I will use the data from Yahoo finance to test the reportlab. apple = Share('AAPL') historical_data = apple.get_historical('2015-01-01', '2015-12-31') data = DataFrame(historical_data)[['Close', 'Date', 'Volume']].reindex(columns=['Date', 'Close', 'Volume']) price = data['Close'].tolist() price = list(map(float, price)) volume = data['Volume'].tolist() tmp = data['Date'].tolist() date = list(range(0, len(tmp))) drawing = Drawing(400, 200) lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 dis_data = list(zip(date, price)) lp.data = [dis_data] lp.lines[0].strokeColor = colors.blue drawing.add(lp) renderPDF.drawToFile(drawing, 'sample.pdf', 'Apple') print('end')
from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker drawing = Drawing(400, 200) data = [ ((1,1), (2,2), (2.5,1), (3,3), (4,5)), ((1,2), (2,3), (2.5,2), (3.5,5), (4,6)) ] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp)
def generate_certificate(elements): style = TableStyle([('TEXTALIGN', (0, 0), (-1, -1), 'CENTER'), ('TEXTCOLOR', (0, 0), (-1, -1), colors.red), ('VALIGN', (0, 0), (0, -1), 'TOP'), ('INNERGRID', (0, 0), (-1, -1), 0.50, colors.red), ('BOX', (0, 0), (-1, -1), 0.50, colors.green), ('BACKGROUND', (0, 0), (-1, -1), colors.blue), ]) s = getSampleStyleSheet() s = s["BodyText"] s.wordWrap = "RGB" styles = ParagraphStyle( name='Normal', fontName='Helvetica-Bold', fontSize=15, alignment=1, ) elements.append(Spacer(1, 0.5 * inch)) i = Paragraph(str("candidate performance vs average performance"), styles) elements.append(i) elements.append(Spacer(1, 0.1 * inch)) drawing = Drawing(0, 200) # for indices data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 6, 21, 23, 38, 46, 20, 5) ] # data for drawing bar graphs bc = VerticalBarChart() bc.x = 0 # x,y define the left bottom of graph bc.y = 0 bc.height = 150 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 6 # next 3 lines is for naming indices bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 60 bc.categoryAxis.categoryNames = ['Jan-99', 'Feb-99', 'Mar-99', 'Apr-99', 'May-99', 'Jun-99', 'Jul-99', 'Aug-99'] drawing.add(bc) elements.append(drawing) elements.append(Spacer(1, 0.5 * inch)) drawing = Drawing(0, 175) # for indices lc = HorizontalLineChart() lc.x = 0 lc.y = 10 lc.height = 150 lc.width = 300 lc.data = data lc.joinedLines = 1 catNames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catNames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 lc.lines[0].strokeWidth = 2 lc.lines[1].strokeWidth = 1.5 drawing.add(lc) elements.append(drawing) drawing = Drawing(0, 400) # for indices data = [ ((1, 1), (2, 2), (2.5, 1), (3, 3), (4, 5)), ((1, 2), (2, 3), (2.5, 2), (3.5, 5), (4, 6)) ] elements.append(Spacer(1, 0.1 * inch)) i = Paragraph(str("candidate performance vs average performance"), styles) elements.append(i) elements.append(Spacer(1, 0.1 * inch)) lp = LinePlot() lp.x = 0 lp.y = 50 lp.height = 300 lp.width = 600 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) elements.append(drawing) elements.append(Spacer(1, 0.1 * inch)) drawing = Drawing(100, 350) pc = Pie() pc.x = 65 pc.y = 15 pc.width = 300 pc.height = 300 pc.data = [10, 20, 30, 40, 50, 60] pc.labels = ['a', 'b', 'c', 'd', 'e', 'f'] pc.slices.strokeWidth = 0.5 pc.slices[3].popout = 10 pc.slices[3].strokeWidth = 2 pc.slices[3].strokeDashArray = [2, 2] pc.slices[3].labelRadius = 1.75 pc.slices[3].fontColor = colors.red drawing.add(pc) elements.append(drawing) elements.append(Spacer(1, 0.5 * inch)) return elements
pattern=re.compile(r'.*?(\d{4})\s+(\d{2})\s+(\d{2})\s+(\d+)\s+(\d+)') for line in urlopen(URL).readlines(): result = re.match(pattern,line) if result==None:continue month.append(int(result.group(2))) day.append(int(result.group(3))) flux.append(int(result.group(4))) sunspot.append(int(result.group(5))) drawing = Drawing(400,200) #makeup data times=[] for x,y in zip(month,day): times.append(x+y/31.0) print times print sunspot print flux # draw plot lp = LinePlot() lp.x=50 lp.y=50 lp.height=125 lp.width=300 lp.data=[zip(times,sunspot),zip(times,flux)] lp.lines[0].strokeColor=colors.blue lp.lines[1].strokeColor=colors.red drawing.add(lp) renderPDF.drawToFile(drawing,'report.pdf','Sunspot')
from reportlab.graphics.shapes import Drawing from reportlab.graphics.charts.piecharts import Pie from reportlab.graphics.charts.lineplots import LinePlot from reportlab.graphics.widgets.markers import makeMarker from reportlab.lib import colors drawing = Drawing(400, 200) data = [((1, 1), (2, 2), (2.5, 1), (3, 3), (4, 5)), ((1, 2), (2, 3), (2.5, 2), (3.5, 5), (4, 6))] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) drawing.save(formats=['pdf'], outDir='./pdfs', fnRoot='chart') # c = canvas.Canvas('./pdfs/chart_canvas.pdf')
def generate_certificate(elements): styles = ParagraphStyle( name='Normal', fontName='Helvetica-Bold', fontSize=15, alignment=1, ) elements.append(Spacer(1, 0.5 * inch)) i = Paragraph(str("candidate performance vs average performance"), styles) elements.append(i) elements.append(Spacer(1, 0.1 * inch)) drawing = Drawing(0, 200) # for indices data = [ (13, 5, 20, 22, 37, 45, 19, 4), (14, 6, 21, 23, 38, 46, 20, 5) ] # data for drawing bar graphs bc = VerticalBarChart() bc.x = 0 # x,y define the left bottom of graph bc.y = 0 bc.height = 150 bc.width = 300 bc.data = data bc.strokeColor = colors.black bc.valueAxis.valueMin = 0 bc.valueAxis.valueMax = 50 bc.valueAxis.valueStep = 10 bc.categoryAxis.labels.boxAnchor = 'ne' bc.categoryAxis.labels.dx = 6 # next 3 lines is for naming indices bc.categoryAxis.labels.dy = -2 bc.categoryAxis.labels.angle = 60 bc.categoryAxis.categoryNames = ['Jan-99', 'Feb-99', 'Mar-99', 'Apr-99', 'May-99', 'Jun-99', 'Jul-99', 'Aug-99'] drawing.add(bc) elements.append(drawing) elements.append(Spacer(1, 0.5 * inch)) drawing = Drawing(0, 175) # for indices lc = HorizontalLineChart() lc.x = 0 lc.y = 10 lc.height = 150 lc.width = 300 lc.data = data lc.joinedLines = 1 catnames = 'Jan Feb Mar Apr May Jun Jul Aug'.split(' ') lc.categoryAxis.categoryNames = catnames lc.categoryAxis.labels.boxAnchor = 'n' lc.valueAxis.valueMin = 0 lc.valueAxis.valueMax = 60 lc.valueAxis.valueStep = 15 lc.lines[0].strokeWidth = 2 lc.lines[1].strokeWidth = 1.5 drawing.add(lc) elements.append(drawing) drawing = Drawing(0, 400) # for indices data = [ ((1, 1), (2, 2), (2.5, 1), (3, 3), (4, 5)), ((1, 2), (2, 3), (2.5, 2), (3.5, 5), (4, 6)) ] elements.append(Spacer(1, 0.1 * inch)) i = Paragraph(str("candidate performance vs average performance"), styles) elements.append(i) elements.append(Spacer(1, 0.1 * inch)) lp = LinePlot() lp.x = 0 lp.y = 50 lp.height = 300 lp.width = 600 lp.data = data lp.joinedLines = 1 lp.lines[0].symbol = makeMarker('FilledCircle') lp.lines[1].symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.0f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.valueSteps = [1, 2, 2.5, 3, 4, 5] lp.xValueAxis.labelTextFormat = '%2.1f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 7 lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] drawing.add(lp) elements.append(drawing) elements.append(Spacer(1, 0.1 * inch)) drawing = Drawing(100, 350) pc = Pie() pc.x = 65 pc.y = 15 pc.width = 300 pc.height = 300 pc.data = [10, 20, 30, 40, 50, 60] pc.labels = ['a', 'b', 'c', 'd', 'e', 'f'] pc.slices.strokeWidth = 0.5 pc.slices[3].popout = 10 pc.slices[3].strokeWidth = 2 pc.slices[3].strokeDashArray = [2, 2] pc.slices[3].labelRadius = 1.75 pc.slices[3].fontColor = colors.red drawing.add(pc) elements.append(drawing) elements.append(Spacer(1, 0.7 * inch)) styles = ParagraphStyle( name='Normal', fontName='Helvetica', fontSize=15, alignment=0, ) elements.append(Spacer(1, 0.5* inch)) i = Paragraph(str("Please click on black square to play the video."), styles) elements.append(i) elements.append(platypus.flowables.Macro('canvas.saveState()')) elements.append(platypus.flowables.Macro('canvas.linkURL("fun.mp4",(400,510,410,500),relative=0,thickness=10)')) elements.append(platypus.flowables.Macro('canvas.restoreState()')) return elements
with open(File, encoding="utf-8") as source: for line in source.readlines(): if not line.isspace() and line[0] not in COMMENT_CHARS: data.append([float(n) for n in line.split()]) predict = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1] / 12.0 for row in data] lp = LinePlot() # 实例化LinePlot lp.x = 50 # 设置属性 lp.y = 50 lp.height = 200 lp.width = 400 lp.data = [ list(zip(times, predict)), list(zip(times, high)), list(zip(times, low)) ] lp.lines[0].strokeColor = colors.blue # 设置折线颜色 lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(250, 150, 'Sunspots', fontSize=14, fillColor=colors.red)) renderPDF.drawToFile(drawing, 'report.pdf', 'Sunspots') # ### reportlab.graphics.charts.lineplots.LinePlot # LinePlot可用于绘制折线图;
for num_clust in dat_dict.keys(): fp_sum = 0 fn_sum = 0 for i in range(1, int(num_clust)): fp_sum = fp_sum + dat_dict[num_clust][str(i)]['ALL_COUNT']/float(TOT) fn_sum = fn_sum + dat_dict[num_clust][str(i)]['AML_COUNT']/float(TOT) FP = TP - fp_sum FN = TN - fn_sum accuracy = (TP + TN) / (TP + FP + TN + FN) * 100.00 accuracy_list.append((num_clust, accuracy)) print "| %d | %02.2f | %02.2f | %02.2f | %02.2f | %02.2f |" % (num_clust, round(fp_sum), round(FP), round(fn_sum), round(FN), round(accuracy)) print "+---------------|-------|------|------|------|--------+" lp.data = [accuracy_list] print lp.data lp.joinedLines = 1 lp.lines.symbol = makeMarker('Circle') lp.lineLabelFormat = '%2.2f' lp.strokeColor = colors.black lp.xValueAxis.valueMin = 0 lp.xValueAxis.valueMax = 5 lp.xValueAxis.labelTextFormat = '%2.0f' lp.yValueAxis.valueMin = 0 lp.yValueAxis.valueMax = 104 lp.yValueAxis.valueStep = 10 xlbl = Label() xlbl.setText("No. of Clusters")
def createTimeSeries(self,ser): if self.single_record: return # Time series are available for these quantities. The number indicates their position in the data string series = {'h':0, 'g':1, 'i10':2, 'i100':6, 'tori':3, 'Read10':7} # The time series plot will get added to the 'drawing' object drawing = Drawing(400, 200) # and it is of type 'LinePlot' lp = LinePlot() lp.x = 30 lp.y = 50 lp.height = 125 lp.width = 350 # Record the publication years, because these values will be used as x axis labels years = sorted(map(lambda b: int(b), filter(lambda a: a.isdigit(), self.data['metrics series'].keys()))) lp.data = [] series_data = [] # The maximum value will be used to scale the y axis max_value = 0 # This list will hold the data points for the histogram for year in years: values = map(lambda a: float(a),self.data['metrics series'][str(year)].split(':')) max_value = max(max_value,values[series[ser]]) if ser == 'read10' and year > 1995: series_data.append((year,values[series[ser]])) else: series_data.append((year,values[series[ser]])) lp.data.append(series_data) lp.joinedLines = 1 # Define the line color lp.lines[0].strokeColor = colors.orange # Actual data point will be marked by a filled circle lp.lines.symbol = makeMarker('FilledCircle') lp.strokeColor = colors.black # The extreme values for the x axis lp.xValueAxis.valueMin = years[0] lp.xValueAxis.valueMax = years[-1] # Proper label placement for years: shift by (-6, -6) in x and y to have labels positioned properly lp.xValueAxis.labels.dx = -6 lp.xValueAxis.labels.dy = -18 # and rotate the labels by 90 degrees lp.xValueAxis.labels.angle = 90 lp.xValueAxis.valueSteps = years # For both axes values will be displayed as integers lp.xValueAxis.labelTextFormat = '%2.0f' lp.yValueAxis.labelTextFormat = '%2.0f' # Define the maximum value of the y axis lp.yValueAxis.valueMax = int(math.ceil(float(max_value)/10.0))*10 # Depending on the range of values, set a value step for the y axis if max_value > 10000: lp.yValueAxis.valueStep = 1000 elif max_value > 1000: lp.yValueAxis.valueStep = 100 else: lp.yValueAxis.valueStep = 10 # The y axis always starts at 0 lp.yValueAxis.valueMin = 0 # Now add the line plot to the 'drawing' object drawing.add(lp) # Finally add the appropriate title to the plot drawing.add(String(200,190,"%s index time series" % ser, textAnchor="middle", fillColor='blue')) # Append the result to the 'story' self.story.append(drawing)
def makeSummary(self, stype): logger.debug('StartQT4::makeSummary(%s)' % stype) pinfo = self.imageViews[-1].getSummaryDemographics() if pinfo is None: return reportname = self.imageViews[-1].getReportName()+'.pdf' filename = QtGui.QFileDialog.getSaveFileName(self, directory=reportname, filter='PDF Files *.pdf(*.pdf);;All Files *(*)') #filename = QtGui.QFileDialog.getSaveFileName(self, filter='PDF Files *.pdf(*.pdf);;All Files *(*)') if len(filename) == 0: return doc = SimpleDocTemplate(str(filename), pagesize=A4, rightMargin=1.5*cm, leftMargin=2*cm, topMargin=2*cm, bottomMargin=3*cm) elements = [] #data = pinfo.items() for iv in self.imageViews: vt = iv.getVelocityText() if stype == 'BOTH' or stype == iv.getViewShortName(): pinfo.append(vt) t=Table(pinfo, rowHeights=12) t.setStyle(TableStyle([('BACKGROUND',(1,1),(-2,-2),colors.green), ('TEXTCOLOR',(0,0),(1,-1),colors.black), ('ALIGNMENT', (0,0),(0,-1), 'RIGHT')])) elements.append(t) for iv in self.imageViews: if stype == 'BOTH' or stype == iv.getViewShortName(): drawing = Drawing(400, 280) cd = iv.getDataPointer() vt = iv.getVelocityText() pinfo.append(vt) #ydata = cd.getCOMYScaled(False, 'mm').tolist() ydata = cd.getCOMYScaled(True, 'mm').tolist() xPlaneFit = cd.getYPlaneFit(units='mm', bothAxes=True).tolist() vdata = cd.getVelocitySlopeScaled(units='mm', bothAxes=True) gdata = [ydata, xPlaneFit] if vdata is not None: gdata.append(vdata.tolist()) title = Label() title.setOrigin(150, 240) title.setText(iv.getViewName()) ylabel = Label() ylabel.setOrigin(0, 100) ylabel.angle = 90 ylabel.setText("Millimeters") xlabel = Label() xlabel.setOrigin(70, 0) xlabel.setText("Seconds") lp = LinePlot() lp.height = 230 lp.width = 400 lp.data = gdata lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green #lp.xValueAxis.xLabel = "Seconds" drawing.add(title) drawing.add(ylabel) drawing.add(xlabel) drawing.add(lp) elements.append(drawing) doc.build(elements, onFirstPage=self.pdfHeaderFooter, onLaterPages=self.pdfHeaderFooter)
def genLPDrawing(data, data_note, width=letter[0]*0.8, height=letter[1]*0.25, timeAxis='day', y_min_zero=False): """ 函数功能:生成Drawing之用 :return: """ drawing = Drawing(width=width, height=height) lp = LinePlot() # lp.x = 50 # lp.y = 50 lp.height = height lp.width = width lp.data = data lp.joinedLines = 1 # 定义颜色集 barFillColors = [ colors.red, colors.green, colors.blue, colors.darkgoldenrod, colors.pink, colors.purple, colors.lightgreen, colors.darkblue, colors.lightyellow, colors.fidred, colors.greenyellow, colors.gray, colors.white,colors.blueviolet, colors.lightgoldenrodyellow] for i in range(0, len(data)): lp.lines[i].name = data_note[i] lp.lines[i].symbol = makeMarker('FilledCircle', size=0.5) lp.lines[i].strokeWidth = 0.2 lp.lines[i].strokeColor = barFillColors[i] # lp.lineLabelFormat = '%2.0f' # lp.strokeColor = colors.black x_min = data[0][0][0] x_max = data[0][-1][0] lp.xValueAxis.valueMin = x_min lp.xValueAxis.valueMax = x_max if timeAxis=='day': step = int(((x_max - x_min) / (60 * 60 * 24)) / 30) + 1 lp.xValueAxis.valueSteps = [n for n in range(int(x_min), int(x_max), 60 * 60 * 24 * step)] lp.xValueAxis.labelTextFormat = lambda x: str(Sec2Datetime(x)[0:10]) lp.xValueAxis.labels.angle = 90 lp.xValueAxis.labels.fontSize = 6 lp.xValueAxis.labels.dy = -18 if y_min_zero: lp.yValueAxis.valueMin = 0 # lp.yValueAxis.valueMax = 50 # lp.yValueAxis.valueSteps = [1, 2, 3, 5, 6] elif timeAxis=='quarter': step = int(((x_max - x_min)/0.25) / 30) + 1 lp.xValueAxis.valueSteps = [n for n in range(int(x_min), int(x_max), int(math.ceil(0.25 * step)))] lp.xValueAxis.labelTextFormat = lambda x: convertValue2Quarter(x) lp.xValueAxis.labels.angle = 90 lp.xValueAxis.labels.fontSize = 6 lp.xValueAxis.labels.dy = -18 if y_min_zero: lp.yValueAxis.valueMin = 0 elif timeAxis=='year': lp.xValueAxis.valueSteps = [n for n in range(int(x_min), int(x_max), 1)] lp.xValueAxis.labelTextFormat = lambda x: str(x) lp.xValueAxis.labels.angle = 90 lp.xValueAxis.labels.fontSize = 6 lp.xValueAxis.labels.dy = -18 if y_min_zero: lp.yValueAxis.valueMin = 0 elif timeAxis=='month': lp.xValueAxis.valueSteps = list(map(lambda x:x[0],data[0])) lp.xValueAxis.labelTextFormat = lambda x: str(Sec2Datetime(x))[0:7] lp.xValueAxis.labels.angle = 90 lp.xValueAxis.labels.fontSize = 6 lp.xValueAxis.labels.dy = -18 if y_min_zero: lp.yValueAxis.valueMin = 0 drawing.add(lp) add_legend(draw_obj=drawing, chart=lp, pos_x=10, pos_y=-20) return drawing
a = urlopen(URL).read().decode('UTF-8') drawing = Drawing(400 ,200) data = [] for line in a.strip().split('\n'): if not line.isspace() and not line[0] in COMMENT_CHARS: data.append([float(n) for n in line.split()]) pred = [row[2] for row in data] high = [row[3] for row in data] low = [row[4] for row in data] times = [row[0] + row[1] / 12 for row in data] lp = LinePlot() lp.x = 50 lp.y = 50 lp.height = 125 lp.width = 300 lp.data = [list(zip(times, pred)), list(zip(times, high)), list(zip(times, low))] lp.lines[0].strokeColor = colors.blue lp.lines[1].strokeColor = colors.red lp.lines[2].strokeColor = colors.green drawing.add(lp) drawing.add(String(250, 150, 'Sumspots', fontSizw = 14, fillColor = colors.red)) renderPDF.drawToFile(drawing, 'report.pdf', 'Sunspots')