Wednesday, July 30, 2008

Awesome Pie Charts with FoxCharts in zero time

If you haven't been trying out the VFPX project FoxCharts , or you tried but were a little frightened by how to implement it, here's some code that I wrote up quickly to build a nice little pie chart.

I call it GenPie and it gets called with any table and it will summarize it for you.

DO GenPie with "issues","cstatus","1","","Count of Issues"

DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders"

The code essentially creates a form, drops FoxCharts on it and then uses a built-in cursor to create the chart. You can also pass it a Filter (before the title) and the starting color (in RGB).

DO genpie WITH HOME()+"SAMPLES\DATA\ORDERS","to_country","order_amt","","Orders",RGB(255,150,255)

Here's a sample:

LPARAMETERS tcTable,tcDirField,tcSizeField,tcFilter,tcTitle,tnStartColor
ox = CREATEOBJECT("form")
IF EMPTY(tcTitle)

tcTitle = tcTable
ox.foxcharts.width = ox.width
ox.foxcharts.height = ox.height

IF EMPTY(tcFilter)
tcFilter= ".T."
SELECT &tcDirField,CAST(SUM(&tcSizeField) as numeric) as ntotal,COUNT(*) as ncnt FROM (tcTable) WHERE &tcFilter GROUP BY 1 INTO TABLE x

ox.foxcharts.sourcealias = "X"
ox.foxcharts.fieldxaxis = tcDirField
ox.foxcharts.visible = .t.
ox.foxcharts.fieldvalue1 = "ntotal"
ox.foxcharts.fieldvalue2 = "ncnt"
ox.foxcharts.Legend2="# Orders"
ox.foxcharts.Legend1="Total "
ox.foxcharts.ChartType = 1
ox.foxcharts.FieldLegend = tcDirField
ox.foxcharts.fieldcolor = ""
ox.foxcharts.colortype = 3
IF EMPTY(tnStartColor)
    tnStartColor = RGB(255,0,0)
ox.foxcharts.color1 = tnStartColor

ox.foxcharts.Title.Caption = tcTitle
ox.foxcharts.SubTitle.Caption = "Pie"
ox.foxcharts.FontName = "Verdana"
ox.FoxCharts.ShowValuesonShapes = .T.

ox.foxcharts.visible = .t.

*!*    logif = _SCREEN.system.Drawing.Imaging.ImageFormat.Bmp
*!*    ox.foxcharts.oBmp.Save("x1.bmp",logif)

It's really easy and even though there are tons of options with it, this piece of code may make it a little easier to work with. If you notice the commented piece out just above, you can easily save the output as a bitmap.

FoxCharts totally rocks!

No comments: