Python-Pie chart in reportlabs

2019-02-27 18:40发布

I'm referring this link for generation of Pie Chart. In this the colors are pre-defined for each data, ie 10 colors for 10 data points. What if I have 11 data points and then there will be no color for that 11th data point. I want something dynamic which should automatically pick a color by itself and plot it on the pie.

I found this link and this link, but the colors over here are not catchy and not at all good.

Can someone please brief me about how to get catchy colors in pie graph?

Thanks

2条回答
爷的心禁止访问
2楼-- · 2019-02-27 18:51

You can also provide from reportlab.lib.colors import Color like:

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

It's easier to manage those arguments than Hex's.
So you could provide a dynamicaly generated list of Color instances. You could yield an iterator that will generate your 'Catchy' colors. I don't think I can define your 'catchyness' for you better than your self :)

查看更多
Juvenile、少年°
3楼-- · 2019-02-27 19:01

I know it's kind of late to be answering, but in case someone else has the same problem, here is what worked for me:

At the start of the code you write:

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"),
    ]

You can change the color codes to get any color you like, some examples: http://www.creativecolorschemes.com/resources/free-color-schemes/beautiful-color-scheme.shtml

And when generating the pie chart you only need to add two lines at the end:

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

Where setItems has been previously defined as:

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])

Use this link (last pie chart example) for extra ereference: http://m.blog.csdn.net/blog/wdt3385/10142163

查看更多
登录 后发表回答