[英]python reportlab categoryAxis label placement
我編寫了一個簡單的函數,可以從一個數據序列生成一個簡單的條形圖,如下所示。 輸入數據可以是正數,也可以是負數,如果為負數,則條形圖會覆蓋類別軸標簽(下面代碼中的圖2和3)。
我已經搜索了reportlab圖形參考 ,並在第202頁上顯示了帶有標簽“低”的條形圖。 但是,用於執行此操作的命令:bc.categoryAxis.labels.dy = -60,似乎是任意選擇的。 如果輸入數據未知,如何知道負偏移量? 有沒有一種方法可以確定圖形上的x軸位置,然后確定該位置的標簽偏移量,或者在輸入數據未知的情況下確定其他解決方法?
感謝您的指導。
from reportlab.graphics.shapes import Drawing
from reportlab.graphics.charts.barcharts import VerticalBarChart
from reportlab.graphics.charts.textlabels import Label
from reportlab.lib import colors
from reportlab.platypus import SimpleDocTemplate
from reportlab.lib.units import inch
from reportlab.lib.pagesizes import letter
def vbar_one_series(data, xlabels, chart_title, xaxis_text):
drawing = Drawing(180, 180)
bc = VerticalBarChart()
bc.x = 25
bc.y = 25
bc.height = 125
bc.width = 150
bc.data = [data]
bc.valueAxis.valueMin = int(min(min(bc.data[0]), 0))
bc.valueAxis.valueMax = int(max(bc.data[0]) + 2)
bc.valueAxis.labels.fontName = 'Helvetica'
bc.valueAxis.labels.fontSize = 7
bc.valueAxis.labelTextFormat = '%0.1f'
bc.bars[0].fillColor = colors.HexColor('#000035')
bc.categoryAxis.labels.boxAnchor = 'c'
bc.categoryAxis.labels.fontName = 'Helvetica'
bc.categoryAxis.labels.fontSize = 7
bc.categoryAxis.tickDown = 0
bc.categoryAxis.labels.dx = 0
bc.categoryAxis.labels.dy = -7
bc.categoryAxis.labels.angle = 0
bc.categoryAxis.categoryNames = xlabels
bc.barLabels.nudge = 10
bc.barLabelFormat = '%0.1f'
bc.barLabels.dx = 0
bc.barLabels.dy = 0
bc.barLabels.fontName = 'Helvetica'
bc.barLabels.fontSize = 7
xlabel = Label()
xlabel.setText(xaxis_text)
xlabel.fontSize = 7
xlabel.fontName = 'Helvetica'
xlabel.dx = 90
xlabel.dy = 5
title = Label()
title.setText(chart_title)
title.fontSize = 7
title.fontName = 'Helvetica'
title.dx = 90
title.dy = 175
drawing.add(bc)
drawing.add(xlabel)
drawing.add(title)
return drawing
if __name__ == '__main__':
bar1 = vbar_one_series([1.0, 2.3, 1.8], ['A', 'B', 'C'],
'Title 1', '')
bar2 = vbar_one_series([-25, 50, 10], ['A', 'B', 'C'],
'Title 2', '')
bar3 = vbar_one_series([0, -1.1, -0.4], ['A', 'B', 'C'],
'Title 3', '')
doc = SimpleDocTemplate('H:/Desktop/report.pdf', pagesize=letter,
topMargin=0.5 * inch, bottomMargin=0.5 * inch)
Catalog = []
Catalog.append(bar1)
Catalog.append(bar2)
Catalog.append(bar3)
doc.build(Catalog)
經過一些額外的研究,我發現可以使用.categoryAxis.labelAxisMode ='low'屬性來解決此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.