Yo suelo usar el foxchart que indica ZeRoberto, muy flexible.
lcwhere = ' where '+ lcsele + ' = "' + lcvalue +'" '
SELECT cperiodo, ROUND(ventas / 1000 ,0) as ventas, ROUND(costototal / 1000 ,0) as costo;
, ROUND( (ventas - costototal) / 1000 ,0) as rentabil;
FROM curtotal;
INTO CURSOR graficar ;
ORDER BY periodo;
&lcwhere
ThisForm.Pgfgral1.Page4.LBltitulo.Caption = lcvalue
WITH ThisForm.Pgfgral1.Page4.Grdgral1
.RecordSource = 'graficar'
.column1.controlsource = 'cperiodo'
.column2.controlsource = 'ventas'
.column3.controlsource = 'costo'
.column4.controlsource = 'rentabil'
.refresh()
ENDWITH
TRY
WITH ThisForm.Pgfgral1.Page4.Foxcharts1
.BACKCOLOR = RGB(255, 255, 255)
.SubTitle.CAPTION = 'Importes en Miles de Pesos'
.ShowValuesonShapes = .T.
.AlphaChannel = 220
.BrushType = 2 && gradient brush
*** .ColorType = 2 && Random colors
.Depth = 30
.SourceAlias = 'graficar'
.FieldAxis2 = 'cperiodo'
.ChartsCount = 3
.ShowSideLegend = .T.
.FIELDS(1).FieldValue = "ventas"
.FIELDS(1).Legend = "ventas"
.Fields(1).Color = RGB(102,204,0)
.FIELDS(2).FieldValue = "COSTO"
.FIELDS(2).Legend = "Costo"
.Fields(2).Color = 255
.FIELDS(3).FieldValue = "RENTABIL"
.FIELDS(3).Legend = "rentabilidad"
.Fields(3).Color = RGB(0,0,255) && RGB(100,175,213) && Blue
.FieldLegend = .FieldAxis2
.TITLE.CAPTION = 'Ventas vs Costos de '+lcvalue
.XAxis.CAPTION = 'Periodos'
.YAxis.CAPTION = 'Importes'
.AxisLegend2.ROTATION = -45
.AxisLegend2.ALIGNMENT = 1 && Right
.ScaleLegend.FORMAT = '@$ 9,999,999.99'
.ShapeLegend.FORMAT = '@$ 9,999,999.99'
.ChartType = 5
.DrawChart()
.Refresh()
ENDWITH
CATCH TO LOERROR
=MESSAGEBOX('PROBLEMAS DE GRAFICACION'+CHR(13)+LOERROR.MESSAGE,64,'CUIDADO')
ENDTRY
ThisForm.Pgfgral1.ActivePage = 4