FICO
FICO Xpress Optimization Examples Repository
FICO Optimization Community FICO Xpress Optimization Home
Back to examples browserPrevious exampleNext example

Drawing a pie chart

Description
This model defines a subroutine for drawing a pie chart for a given list of data values, with specified center position and radius and a title text.

Further explanation of this example: 'Mosel Language Reference', Chapter 'mmsvg'


Source Files





pie.mos

(!******************************************************
   Mosel graph examples
   ==================== 

   file pie.mos
   ````````````
   Drawing a pie chart.
   
   Uses functions from the mmsvg library to draw
   a "User graph" in SVG format.
   
   (c) 2017 Fair Isaac Corporation
       Author: S. Heipcke, Jul. 2017, rev. Sep. 2017
*******************************************************!)

model pie
  uses "mmsvg"

  declarations
    NP=8
    PDATA: array(RP:range) of real
    PID: array(RP) of string
  end-declarations

  procedure drawpie(xpos, ypos: integer, rad: integer, data:array(R:range) of real,
                    pids:array(range) of string, msg: text)
    if sum(i in R) data(i)>1 then
      writeln("Incorrect pie data.")
      return
    end-if

    ttl:=0.0
    forall(i in R) do
      svgaddgroup(pids(i),"Pie slice "+i)
      svgsetstyle(SVG_STROKE,SVG_GREY)
      svgsetstyle(SVG_STROKEWIDTH,0.5)
      svgaddpie(pids(i), xpos, ypos, rad, ttl, ttl+data(i))
      ttl+=data(i)
    end-do

    svgaddgroup("msg", "", SVG_GREY)
    svgaddtext(xpos, ypos+rad+20, msg)
    svgsetstyle(svggetlastobj, SVG_TEXTANCHOR, "middle")

   ! Draw the graph
    svgrefresh
  end-procedure

 ! Some random data and group IDs
  PDATA::(1..8)[0.2, 0.1, 0.12, 0.05, 0.23, 0.13, 0.075, 0.095]
  forall(i in RP) PID(i):="gp"+i

 ! Configure and draw the graphic
  svgsetgraphviewbox(0,0,200,200)
  drawpie(100, 100, 50, PDATA, PID, "Pie chart example")

 ! Optionally save graphic to a file
  svgsave("pie.svg")

 ! Wait for display window to close
  svgwaitclose("Close browser window to terminate model execution.", 1)

end-model

Back to examples browserPrevious exampleNext example