reportlabs中的Python-Pie图表

时间:2013-12-05 05:30:18

标签: python pdf pdf-generation reportlab

我指的是this link生成饼图。在此,为每个数据预定义颜色,即10个数据点的10种颜色。如果我有11个数据点然后第11个数据点没有颜色怎么办?我想要一些动态的东西,它应该自动选择颜色并将其绘制在馅饼上。

我找到了this linkthis link,但这里的颜色并不吸引人,也没有用。

有人可以告诉我如何在饼图中获得吸引人的颜色吗?

由于

2 个答案:

答案 0 :(得分:0)

您还可以提供from reportlab.lib.colors import Color之类的内容:

Color(red=0, green=0, blue=1, alpha=1) # gives blue
Color(red=1, green=0, blue=0, alpha=1) # gives red

管理这些争论比Hex更容易 因此,您可以提供动态生成的Color实例列表。你可以yield一个生成'Catchy'颜色的迭代器。我认为我不能比你自己更好地定义你的“吸引力”:)

答案 1 :(得分:0)

我知道回答有点迟,但如果其他人遇到同样的问题,这对我有用:

在您编写的代码开头:

from reportlab.lib.colors import HexColor
pdf_chart_colors = [
    HexColor("#0000e5"),
    HexColor("#1f1feb"),
    HexColor("#5757f0"),
    HexColor("#8f8ff5"),
    HexColor("#c7c7fa"),
    HexColor("#f5c2c2"),
    HexColor("#eb8585"),
    HexColor("#e04747"),
    HexColor("#d60a0a"),
    HexColor("#cc0000"),
    HexColor("#ff0000"),
    ]

您可以更改颜色代码以获得您喜欢的任何颜色,例如:http://www.creativecolorschemes.com/resources/free-color-schemes/beautiful-color-scheme.shtml

生成饼图时,最后只需要添加两行:

def piechart(Values, Names):        
    d = Drawing(100, 125)
    cht = Pie()
    ...
    n = len(cht.data)
    setItems(n,cht.slices,'fillColor',pdf_chart_colors)

其中setItems先前已定义为:

def setItems(n, obj, attr, values):
m = len(values)
i = m // n
for j in xrange(n):
    setattr(obj[j],attr,values[j*i % m])

使用此链接(最后一个饼图示例)进行额外的引用:http://m.blog.csdn.net/blog/wdt3385/10142163