2011-11-10 4 views
3

私はLinePlotチャートを生成するためにreportlabを使用しています。私はX軸の数値でないラベルを得ることができません。 enter image description hereレポートラベルに日付ラベルを追加するLinePlotチャート

誰にでもアイデアはありますか?

これは私のLineplotチャートクラス(注です:。このクラスの外イムdonigいくつかの計算と設定していますが、私はあなたがテストすることができ、簡単な例を生成要旨

import reportlab 
from advisor.charting.Font import Font 

from reportlab.lib.colors import Color, HexColor 
from reportlab.lib.pagesizes import cm, inch 
from reportlab.graphics.charts.legends import Legend 
from reportlab.graphics.charts.textlabels import Label 
from reportlab.graphics.charts.linecharts import HorizontalLineChart 
from reportlab.graphics.charts.lineplots import LinePlot 
from reportlab.graphics.shapes import Drawing, String, _DrawingEditorMixin 
from reportlab.graphics.widgets.markers import makeMarker 


class TacticalAugLineGraph(_DrawingEditorMixin, Drawing):  
    def __init__(self, width=100, height=110, legend=False, *args, **kw): 
     apply(Drawing.__init__, (self, width, height) + args, kw) 

     chartFont = Font('Gotham-Bold') 

     self._add(self, LinePlot(), name='chart', validate=None, desc=None) 
     self.chart._inFill = 1 
     self.chart.x    = 20 
     self.chart.y    = 15 
     self.chart.width  = 85 
     self.chart.height = 95 

     #self.chart.lineLabelFormat = '%d%%' 
     self.chart.yValueAxis.valueMin = 0 
     self.chart.yValueAxis.valueMax = 100 
     self.chart.yValueAxis.valueStep = 10 

    def apply_colors(self, colors): 

     self.chart.lines[0].strokeColor = colors[0] 
     self.chart.lines[1].strokeColor = colors[1] 
     self.chart.lines[2].strokeColor = colors[2] 
     self.chart.lines[3].strokeColor = colors[3] 

答えて

5

を取得した結果は次のようになりますこの:フォーマッタで enter image description here

#!/usr/bin/python 
from reportlab.graphics.charts.lineplots import LinePlot 
from reportlab.graphics.shapes import Drawing 
from reportlab.lib import colors 
from random import randint 
from datetime import date, timedelta 

# Generate some testdata 
data = [ 
    [(x,randint(90,100)) for x in range(0,2001,100)], 
    [(x,randint(30,80)) for x in range(0,2001,100)], 
    [(x,randint(5,20)) for x in range(0,2001,100)], 
    ] 

# Create the drawing and the lineplot 
drawing = Drawing(400, 200) 
lp = LinePlot() 
lp.x = 50 
lp.y = 50 
lp.height = 125 
lp.width = 300 
lp._inFill = 1 
lp.data = data 
for i in range(len(data)): 
    lp.lines[i].strokeColor = colors.toColor('hsl(%s,80%%,40%%)'%(i*60)) 

# Specify where the labels should be 
lp.xValueAxis.valueSteps = [5, 500, 1402, 1988] 
# Create a formatter that takes the value and format it however you like. 
def formatter(val): 
    #return val 
    #return 'x=%s'%val 
    return (date(2010,1,1) + timedelta(val)).strftime('%Y-%m-%d') 

# Use the formatter 
lp.xValueAxis.labelTextFormat = formatter 
drawing.add(lp) 

from reportlab.graphics import renderPDF 
renderPDF.drawToFile(drawing, 'example.pdf', 'lineplot with dates') 

は、あなたがそれでより良いグリップを得るために遊ぶことができる2つの代替return文があり

もちろん、x軸のデータが始まる日付である場合は、フォーマッタを使用する必要はありません。その場合は、ラベルがどこにあるかを指定するだけで済みます(デフォルトの位置付けに満足していない場合)。

上記の例は、reportlab documentationの105ページのアイデアを借りています。

幸運:)

関連する問題