【问题标题】:Python-Pie chart in reportlabs报告实验室中的 Python 饼图
【发布时间】:2013-12-21 22:23:27
【问题描述】:

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

我找到了this linkthis link,但是这里的颜色不吸引人,一点也不好看。

谁能简单介绍一下如何在饼图中获得醒目的颜色?

谢谢

【问题讨论】:

    标签: python pdf pdf-generation reportlab


    【解决方案1】:

    我知道现在回答有点晚了,但如果其他人有同样的问题,这对我有用:

    在您编写的代码的开头:

    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

    【讨论】:

    • 类似地,可以使用颜色图并遍历 cmap 的 len 范围的索引。即使使用具有 2 或 3 种基色的颜色图,每个索引的不同阴影也会很有用(前提是在这种情况下没有太多索引)。
    【解决方案2】:

    您也可以提供from reportlab.lib.colors import Colorlike:

    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”颜色。我不认为我能比你自己更好地为你定义你的“吸引人”:)

    【讨论】:

    • 让我试着回复你。谢谢。
    • 我试过这个。它给了我所有的白色。 pdf_chart_colors = [] for i in range(1,length+1): pdf_chart_colors.append(Color(red=i, green=i, blue=i, alpha=1)) return pdf_chart_colors
    • 另外请在stackoverflow.com/questions/20416078/…提供您的建议
    • pdf_chart_colors = [for Color(red=i, green=i, blue=i, alpha=1) in range(1,length+1)] 当然如果提供length 会做一堆灰度颜色。
    • 那么,我应该如何改变这个?请建议。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多