如何在 ReportLab 中将聊天栏中的每个栏设置为不同的颜色?

How to set each individual bar in a bar chat to a different color in ReportLab?

我正在使用此函数通过 Reportlab

创建条形图
def make_drawing():
    from reportlab.lib import colors
    from reportlab.graphics.shapes import Drawing
    from reportlab.graphics.charts.barcharts import HorizontalBarChart
    drawing = Drawing(400, 200)


    data = [
           (13, 5, 20, 22, 37, 98, 19, 4),
           ]

    names = ["Cat %s" % i for i in xrange(1, len(data[0])+1)]

    bc = HorizontalBarChart()
    bc.x = 20
    bc.y = 50
    bc.height = 200
    bc.width = 400
    bc.data = data
    bc.strokeColor = colors.white
    bc.valueAxis.valueMin = 0
    bc.valueAxis.valueMax = 100
    bc.valueAxis.valueStep = 10
    bc.categoryAxis.labels.boxAnchor = 'ne'
    bc.categoryAxis.labels.dx = -10
    bc.categoryAxis.labels.fontName = 'Helvetica'
    bc.categoryAxis.categoryNames = names

    drawing.add(bc)
    return drawing

默认情况下条形图颜色设置为红色

我在设置后加上这两行bc.categoryAxis.categoryNames

    bc.bars[0].fillColor = colors.blue
    bc.bars[1].fillColor = colors.red

希望将第一个栏设置为蓝色。但是现在所有的条都是蓝色的。

条形图可以像这样在每个位置有多个条形图

因此,bars 是二维数组。您可以像这样为单个条设置颜色

bc.bars[(0, 0)].fillColor = colors.blue
bc.bars[(0, 1)].fillColor = colors.green

这将生成这样的图表

这是一个迟到的答案,但这是我在寻找相同解决方案时发现的第一个结果。

是的,如果您在一个条形图中有一系列条形图,您可以按其索引为每个系列着色。但是要为一个系列中的每个条形图着色,您可以使用坐标:

bc.bars[(0, 1)].fillColor = colors.blue
bc.bars[(0, 2)].fillColor = colors.red

等等

http://reportlab-users.reportlab.narkive.com/CZRXnJBQ/can-we-change-the-color-of-each-bar-in-a-vertical-bar-chart#post3