Nirmal Malapaka

Wolfram Research, Inc.

Creating Effective Visualizations

Understanding Visual Coordinate Systems

Whitespace

Styles, Labels

Grid

Create Visualization from components

Understanding Visual Coordinate Systems

User Coordinates

Mathematica supports a variety of coordinate systems, organized for ease and efficiency of both direct and programmatic use. It supports convenient robust automatic range and scaling computation, as well as mechanisms for explicit detailed placement specification.

User Coordinates (Raw/Actual Coordinates) (the range of coordinates to include in a graphic)

- ratio of overall height to width (Automatic to use raw coordinate values) (AspectRatio)
- absolute size of the graphic (Small, Large, number of pixels, ...) (ImageSize)
- If the object has a definite aspect ratio that is not h/w, then space will be left around it.

Data

ssdata = {{1749,80.9},{1750,83.4},{1751,47.7},{1752,47.8},{1753,30.7},{1754,12.2},{1755,9.6},{1756,10.2},{1757,32.4},{1758,47.6},{1759,54.},{1760,62.9},{1761,85.9},{1762,61.2},{1763,45.1},{1764,36.4},{1765,20.9},{1766,11.4},{1767,37.8},{1768,69.8},{1769,106.1},{1770,100.8},{1771,81.6},{1772,66.5},{1773,34.8},{1774,30.6},{1775,7.},{1776,19.8},{1777,92.5},{1778,154.4},{1779,125.9},{1780,84.8},{1781,68.1},{1782,38.5},{1783,22.8},{1784,10.2},{1785,24.1},{1786,82.9},{1787,132.},{1788,130.9},{1789,118.1},{1790,89.9},{1791,66.6},{1792,60.},{1793,46.9},{1794,41.},{1795,21.3},{1796,16.},{1797,6.4},{1798,4.1},{1799,6.8},{1800,14.5},{1801,34.},{1802,45.},{1803,43.1},{1804,47.5},{1805,42.2},{1806,28.1},{1807,10.1},{1808,8.1},{1809,2.5},{1810,0.},{1811,1.4},{1812,5.},{1813,12.2},{1814,13.9},{1815,35.4},{1816,45.8},{1817,41.1},{1818,30.4},{1819,23.9},{1820,15.7},{1821,6.6},{1822,4.},{1823,1.8},{1824,8.5},{1825,16.6},{1826,36.3},{1827,49.7},{1828,62.5},{1829,67.},{1830,71.},{1831,47.8},{1832,27.5},{1833,8.5},{1834,13.2},{1835,56.9},{1836,121.5},{1837,138.3},{1838,103.2},{1839,85.8},{1840,63.2},{1841,36.8},{1842,24.2},{1843,10.7},{1844,15.},{1845,40.1},{1846,61.5},{1847,98.5},{1848,124.3},{1849,95.9},{1850,66.5},{1851,64.5},{1852,54.2},{1853,39.},{1854,20.6},{1855,6.7},{1856,4.3},{1857,22.8},{1858,54.8},{1859,93.8},{1860,95.7},{1861,77.2},{1862,59.1},{1863,44.},{1864,47.},{1865,30.5},{1866,16.3},{1867,7.3},{1868,37.3},{1869,73.9},{1870,139.1},{1871,111.2},{1872,101.7},{1873,66.3},{1874,44.7},{1875,17.1},{1876,11.3},{1877,12.3},{1878,3.4},{1879,6.},{1880,32.3},{1881,54.3},{1882,59.7},{1883,63.7},{1884,63.5},{1885,52.2},{1886,25.4},{1887,13.1},{1888,6.8},{1889,6.3},{1890,7.1},{1891,35.6},{1892,73.},{1893,84.9},{1894,78.},{1895,64.},{1896,41.8},{1897,26.2},{1898,26.7},{1899,12.1},{1900,9.5},{1901,2.7},{1902,5.},{1903,24.4},{1904,42.},{1905,63.5},{1906,53.8},{1907,62.},{1908,48.5},{1909,43.9},{1910,18.6},{1911,5.7},{1912,3.6},{1913,1.4},{1914,9.6},{1915,47.4},{1916,57.1},{1917,103.9},{1918,80.6},{1919,63.6},{1920,37.6},{1921,26.1},{1922,14.2},{1923,5.8},{1924,16.7}};

mGray=RGBColor[0.666667,0.670588,0.670588];
mLightGray=RGBColor[0.905882,0.905882,0.909804];
mGreen=RGBColor[0.666667,0.815686,0.290196];

Manipulate[ListLinePlot[ssdata,AspectRatio->Dynamic@ar,
Filling->Axis,FillingStyle->mGreen,PlotStyle->Directive[mGray,Thick]],
{ar,.5,.1,.1}]

Wolfer’s Sunspot Numbers, 1749-1924

Daily relative sunspot numbers are based on counts of spots and group entities of spots on the sun’s surface. Wolfer’s numbers reduce these observations to a common basis:k(f+10g), where g is the number of groups, for a given day, f is the total number of component spots in these groups and k is a factor dependent on the estimated efficiency of the observer and his telescope. Data are the mean of daily values for each year. Source: Yule (1927). [Chapter 7]

Understanding Visual Coordinate Systems

Scaled Coordinates

- scaled relative to the graphic area (Scaled)
- scaled relative to the rendered image (ImageScaled)

Scaled is proportional to PlotRange. ImageScaled is proportional to ImageSize:

Manipulate[Framed[Graphics[{mGreen, EdgeForm[Directive[Thick,mGray]],
Disk[Dynamic@Scaled[{sc,sc}],.2]},Frame->True,PlotRange->1.5]],
{sc,0.,1,.1}]

Manipulate[Framed[Graphics[{mGreen,EdgeForm[Directive[Thick,mGray]],
Disk[Dynamic@ImageScaled[{isc,isc}],.2]},Frame->True,PlotRange->1.5]],
{isc,0.,1,.1}]

Plot[Sin[x]+x,{x,0,2*Pi},"DefaultAxesStyle"->Directive[Antialiasing->True,Thickness[0.0025]],
BaseStyle->{"Graphics",Thickness[0.005],FontSize->Scaled[0.03]},
PlotStyle->mGray, Filling->Axis, FillingStyle->mGreen]

Understanding Visual Coordinate Systems

Pixel-based (Pixels, Points and ems)

Pixel Based (relative and absolute sizes of points)

- Environment sensitivity

- font size in absolute points, or relative to overall image size (FontSize)
- relative and absolute sizes of points (PointSize)
- line thickness (AbsoluteThickness)
- absolute size of the graphic (Small, Large, number of pixels, ...) (ImageSize)
- offset by an absolute distance (Offset)

The absolute thickness is measured in units of printer’s points, equal before magnification to 1/72 of an inch.

In graphics, FontSize->Scaled[s] gives a font whose point size is a fraction s of the horizontal plot range.

The offset is measured in units of printer’s points, equal before magnification to 1/72 of an inch.

The thickness r is given as a fraction of the horizontal plot range.

Graphics[{AbsoluteThickness[15], mGreen,Line[{{-1,0},{1,0}}],
Text[Style["15 points",Black,FontSize->15],{0,0}]}]

Graphics[{Thickness[.5],mGreen, Line[{{-1,0},{1,0}}],
Text[Style["15 points",Black,FontSize->15],{0,0}]},Frame->True,PlotRangeClipping->True]

BarChart[Range[3],ChartStyle->{
{Directive[mLightGray,EdgeForm[AbsoluteThickness[2]]],
Directive[mGray,EdgeForm[AbsoluteThickness[3]]],
Directive[mGreen,EdgeForm[AbsoluteThickness[4]]]}},
ChartLegends->Range[3],PerformanceGoal->"Speed"]

BarChart[Range[3],
ChartStyle->{EdgeForm[Thickness[.02]],{mLightGray,mGray,mGreen}},
ChartLegends->Range[3],PerformanceGoal->"Speed"]

Whitespace

Understanding where whitespace comes from

- how much to extend the range of coordinates, axes, etc. (PlotrangePadding)
- extra space outside the final plot range to leave for labels, etc.  (ImagePadding)
- the overall size of the final image (ImageSize)
- margins to leave outside the final image (ImageMargins)
- the shape of the final image, leaving empty space if necessary (AspectRatio)
- margins to leave outside the final image (FrameMargins)

DynamicModule[{ip=0.},
{Framed@BubbleChart[RandomReal[1,{5,7,3}],ImagePadding->Dynamic@ip],
Slider[Dynamic[ip],{0,100,1}]}
]

DynamicModule[{prp=0.},
{BubbleChart[RandomReal[1,{5,7,3}],PlotRangePadding->Dynamic@prp],
Slider[Dynamic[prp],{0,1,.10}]}
]

DynamicModule[{im=0.},
{Framed@BubbleChart[RandomReal[1,{5,7,3}],ImageMargins->Dynamic@im],
Slider[Dynamic[im],{0,100,1}]}
]

DynamicModule[{fm=0.},
{Framed[BubbleChart[RandomReal[1,{5,7,3}]],FrameMargins->Dynamic@fm],
Slider[Dynamic[fm],{0,100,1}]}
]

Understanding Visual Coordinate Systems

Working with combined coordinate systems

Magnify magnifies every aspect of the image of expr, including fonts and margins.

For objects specified with scaled coordinates Scaled[{x,y}], GeometricTransformation effectively applies its transformation to the corresponding ordinary coordinates. 

Normal[expr] if possible replaces all GeometricTransformation[Subscript[g, i],...] constructs by versions of the Subscript[g, i] in which the coordinates have explicitly been transformed.

Explicit coordinates {x,y} are taken to be in the coordinate system of the graphic in which Scale[...] appears. 

For objects specified with scaled coordinates Scaled[{x,y}], Scale effectively applies its transformation to the corresponding ordinary coordinates. 

Scale can modify the regions allocated to Text and Inset objects, but does not directly affect their contents, and does not scale fonts or other textual elements.

Normal[expr] if possible replaces all Scale[Subscript[g, i],...] constructs by versions of the Subscript[g, i] in which the coordinates have explicitly been transformed.

A major problem with manual tick construction, is that you generally don' t know how large the graphic is, so you don' t know how many ticks to generate.But it looks like we could in theory pass in the relevant information :

ticks[size_][min_,max_]:={{min/4+3 max/4,size}}

Graphics[{},Ticks->Dynamic@{ticks[CurrentValue[{GraphicsBoxOptions,ImageSize}]],ticks[CurrentValue[{GraphicsBoxOptions,ImageSize}]]},Axes->True]

Magnify[Plot[Sin[x]+x,{x,0,2*Pi},PlotLabel->Style["Magnified Plot",FontSize->10],
PlotStyle->mGray,Filling->Axis,FillingStyle->mGreen],2]

Plot[Sin[x]+x,{x,0,2*Pi},PlotLabel->Style["Sized Plot",FontSize->20],
TicksStyle->Directive[Black,FontSize->20],ImageSize->800,
PlotStyle->{mGray, Thick}, Filling->Axis,FillingStyle->mGreen]

Show[Graphics@First@Plot[Sin[x],{x,0,2*Pi},Axes->False,
PlotStyle->{Thick,mGray},Filling->Axis,FillingStyle->mGreen],
PlotRange->{{0,2*Pi},{-1,1}},Axes->True]

Show[Graphics[{GeometricTransformation[First@Plot[Sin[x],{x,0,2*Pi},Axes->False,
PlotStyle->{Thick,mGray},Filling->Axis,FillingStyle->mGreen],
ReflectionTransform[{0,1}]],
Style[Line[{{0,0},{2*Pi,0}}],Antialiasing->False],
Style[Line[{{0,-1},{0,1}}],Antialiasing->False],
Style[Line[{{0,-1},{.05,-1}}],Antialiasing->False],
Style[Line[{{0,1},{.05,1}}],Antialiasing->False],
Text["-1.0",{-.15,1}],
Text["1.0",{-.15,-1}]},
Axes->{True,False},AxesStyle->Opacity[0.],Ticks->{{Pi, 2*Pi},None},
TicksStyle->Opacity[1.]],ImageSize->800]

Styles, Labels, Legends

Unified application of Styles

Mathematica allows you detailed control over the way that graphics objects are rendered. The combination of sequentially-acting graphics directives, together with hierarchical style specifications, makes possible succinct descriptions of complex graphical scenes.

- Be mindful of the elements used

Directive — compound directive
Style — general style specification

Data

l={{"Jason Scherzer",3.4,25.},{"Grayson Stallings",4.9,22.},{"Matthias",5.,25.},{"R.J. Dickie",2.8,10.},{"Daniel Allegri",3.1,15.},{"Sunny Liu",1.8,7.},{"Elisa Tang",2.3,8.},{"Cedric Cerbolles",4.1,25.},{"Theresa Sy",4.4,20.},{"Dennis Baker",3.9,19.},{"Win Huo",1.8,15.},{"Dorothy Yang",1.8,15.},{"Stephen Zuber",6.4,21.},{"David Morton",6.5,25.},{"Peter Ting",5.5,25.},{"Gideon Needleman",5.5,25.},{"Yip",2.1,3.},{"Tong",2.1,3.},{"Pepe Purcell",4.9,19.},{"Joe Martin",4.1,19.},{"Adrian Longab",2.8,19.},{"Nancy Zhou",4.7,22.},{"Eric Semasaka",4.1,24.},{"Maribel Carlos",2.6,21.},{"Clark",4.4,23.},{"Angie Liu",3.7,24.},{"Jeff Q",6.7,23.},{"Christopher Vivien",5.9,21.},{"Samuel Chen",7.8,7.},{"Monica Huang",1.3,5.},{"Business Guy",3.6,24.},{"Lily",2.1,13.},{"Tang",2.1,10.},{"Caroline",3.1,3.}};

ListPlot[{#}&/@l[[All,2;;3]],AxesOrigin->{0,0},PlotMarkers->l[[All,1]],
PlotRange->All]

ListPlot[{#}&/@l[[All,2;;3]],AxesOrigin->{0,0},PlotMarkers->(Thread[Mouseover[Style[#,Opacity[.2],FontFamily->"LucidaGrande"],Style[#,Bold,FontFamily->"LucidaGrande"]]]&/@l[[All,1]])]

Plot[PDF[NormalDistribution[],x],{x,-5,5},ImagePadding->{{0,0},{20,0}},
Epilog->Text[Style["observations", FontFamily->"Helvetica",FontSize->18],
ImageScaled[{0.5,0}],{0,-1}],PlotRangeClipping->False,
PlotStyle->{Thick,mGray},Filling->Axis,FillingStyle->mGreen]

Labeled[Plot[PDF[NormalDistribution[],x],{x,-5,5},ImagePadding->{{0,0},{20,0}},
PlotStyle->{Thick,Gray},Filling->Axis,FillingStyle->mGreen],
{Style["Probability", FontFamily->"Helvetica",FontSize->18],
Style["Observations", FontFamily->"Helvetica",FontSize->18]},
{{Top,Center},{Bottom,Center}}]

Grid

Grid

- Show and Grid
- Alignment options (also supports scaled values -1 to +1)
- Spacings (For Grid, Column, and Row, settings for Spacings are in units of the current font size. )
- The outer edge of the grid is taken to be at the midpoint of the outermost spacing on every side.
- ItemSize: In Grid, w is measured in ems, and h in line heights.
- Grid will not change the size of graphics or other objects that have explicit ImageSize settings.

data={{"Casio",0,2,0, "No"},{"HTC",0,4,13, "Yes"},{"Huawei",0,2,0, "No"},{"Kyocera",0, 0, 2, "No"},{"LG",0, 4, 2, "Yes"},{"Motorola",3, 5, 4, "Yes"},{"Pantech",0, 2, 0, "No"},{"Samsung",3, 10, 9, "Yes"},{"Sony Ericsson",0,0,5, "Yes"}};

Text@Grid[Prepend[data,{"Phone Brand","# Phones running Android 2.1","# Phones Running Android 2.2","# Phones running Android 2.3", "Update Alliance Member"}],Background->{None,{mLightGray,{White,mGreen}}},Dividers->{{Darker[mGray,.6],{mLightGray},mGray},{mGray,mGray,{False},mGray}},Alignment->{{Left,Left,{Left}}},ItemSize->{{10,10,10,10,10}},Frame->mGray,ItemStyle->14,Spacings->Automatic]

Make the Components

Title1

ti=Graphics[{AbsoluteThickness[25],{Opacity[.5],Line[{{-5,0},{20,0}}]},Text[Style["TOTAL ANDROID PHONES PER VERSION BY MANUFACTURER",White,
FontSize->15, FontFamily->"Helvetica", Bold],{7.5,0}]},ImageSize->(*Scaled[1]*)800,
ImagePadding->{{0,Scaled[.02]},{Scaled[.02],Scaled[.02]}},PlotRangePadding->0.,Frame->True,PlotRangeClipping->True]

ti=Graphics[{AbsoluteThickness[25],{Opacity[.5],Line[{{-5,0},{20,0}}]},Text[Style["TOTAL ANDROID PHONES PER VERSION BY MANUFACTURER",White,
FontSize->15, FontFamily->"Helvetica", Bold],{7.5,0}],
Text[Style["5",FontFamily->"Helvetica",Medium,Bold, Gray],{5,-1.5}],
Text[Style["10",FontFamily->"Helvetica",Medium,Bold,Gray],{10,-1.5}],
Text[Style["15",FontFamily->"Helvetica",Medium,Bold,Gray],{15,-1.5}],
Text[Style["PHONES",FontFamily->"Helvetica",Medium,Bold,Gray],{20,-1.5},Right]},
ImageSize->(*Scaled[1]*)800,ImagePadding->{{0,Scaled[.02]},{Scaled[.02],Scaled[.02]}},PlotRangePadding->0,Frame->False]

Title2

ti2=Graphics[{AbsoluteThickness[25],{Opacity[.5],Line[{{-5,0},{20,0}}]},Text[Style[Superscript["ANDROID PHONES PER VERSION IN THE UPDATE ALLIANCE",Style[2,LightGray]],White,
FontSize->15, FontFamily->"Helvetica", Bold],{7.5,0}]},
ImageSize->(*Scaled[1]*)800,ImagePadding->{{0,Scaled[.02]},{0,0}},PlotRangePadding->0,Frame->False]

Make the Components

Legend

lg=Graphics[{
{EdgeForm[LightGray],Opacity[0.],Rectangle[Offset[{10,20},{0,0}],Offset[{-10,-20},{1,1}]]},
{mLightGray,Rectangle[Scaled[{.25,.6}],Scaled[{.75,.8}]]},
{mGray,Rectangle[Scaled[{.25,.4}],Scaled[{.75,.6}]]},
{mGreen,Rectangle[Scaled[{.25,.2}],Scaled[{.75,.4}]]},
{Text[Style["Version", FontFamily->"Helvetica",FontSize->16,Bold,Gray],Offset[{0,-10},{.5,1}],Bottom,Background->White]},
{Text[Style["(CURRENT)",FontFamily->"Helvetica",FontSize->10,Bold,Gray],Offset[{0,-12},{.5,1}],Top,Background->Directive[Opacity[1],White]]},
{Text[Style["2.1", FontFamily->"Helvetica",FontSize->22,Bold,Gray],{.5,.7}]},
{Text[Style["2.2", FontFamily->"Helvetica",FontSize->22,Bold,White],{.5,.5}]},
{Text[Style["2.3", FontFamily->"Helvetica",FontSize->22,Bold,White],{.5,.3}]}
},AspectRatio->2]

Make the Components

Core Chart

BarChart[{{5,0,0},{9,10,3},{0,2,0},{4,5,3},{2,4,0},{2,0,0},{0,2,0},{13,4,0},{0,2,0}},
ChartLabels->{Placed[Reverse@{"Casio","HTC","Huawei","Kyocera","LG","Motorola","Pantech","Samsung","Sony Ericsson"},Below],Placed[{"2.1","2.2","2.3"},Above]},ChartStyle->13]

Make the Components

Axis

lc=Graphics[{

{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-1/15.}],Scaled[{.2,1}]]},
{White,Text[Style["Casio",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-.02}],Left]},

{EdgeForm[Gray],GrayLevel[.2],Rectangle[Scaled[{0,1-3/15.}],Scaled[{.2,1-1/15.}]]},
{White,Text[Style[Superscript["HTC",1],FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-1/15.-.02}],Left]},

{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-4/15.}],Scaled[{.2,1-3/15.}]]},
{White,Text[Style["Huawei",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-3/15.-.02}],Left]} ...

lc=Graphics[{
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-1/15.}],Scaled[{.2,1}]]},
{White,Text[Style["Casio",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.2],Rectangle[Scaled[{0,1-3/15.}],Scaled[{.2,1-1/15.}]]},
{White,Text[Style[Superscript["HTC",1],FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-1/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-4/15.}],Scaled[{.2,1-3/15.}]]},
{White,Text[Style["Huawei",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-3/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-5/15.}],Scaled[{.2,1-4/15.}]]},
{White,Text[Style["Kyocera",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-4/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-7/15.}],Scaled[{.2,1-5/15.}]]},
{White,Text[Style["LG",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-5/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-10/15.}],Scaled[{.2,1-7/15.}]]},
{White,Text[Style["Motorola",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-7/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-11/15.}],Scaled[{.2,1-10/15.}]]},
{White,Text[Style["Pantech",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-10/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,1-14/15.}],Scaled[{.2,1-11/15.}]]},
{White,Text[Style["Samsung",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-11/15.-.02}],Left]},
{EdgeForm[Gray],GrayLevel[.4],Rectangle[Scaled[{0,0}],Scaled[{.2,1-14/15.}]]},
{White,Text[Style["Sony Ericsson",FontFamily->"Helvetica",Medium,Bold],Scaled[{0.02,1-14/15.-.02}],Left]}
},Frame->False,PlotRangePadding->0]

Make the Components

Core Chart Styling

bc=BarChart[{5,9,10,3,2,4,5,3,2,4,2,2,13,4,2},BarOrigin->Left,Axes->False,PlotRangePadding->{{Scaled@.2,0},{0,0}},Frame->False,GridLines->{{5,10,15},None},ImagePadding->{{0,0.},{0,0}},BarSpacing->0.,PlotRange->{{0,20},All},ChartStyle->{mGreen,mGreen,mGray,mLightGray,mGray,mGreen,mGray,mLightGray,mGreen,mGray,mGreen,mGray,mGreen,mGray,mGray},ChartElementFunction->ChartElementDataFunction["FadingRectangle","GradientOrigin"->Right],
ChartBaseStyle->EdgeForm[None],GridLinesStyle->LightGray]

Assemble Components

My BarChart

myBc=Show[{bc, Graphics@Inset[lg,Scaled[{.89,-.05}],Scaled[{0,0}]]},lc,ImagePadding->{{0,Scaled[.02]},{Scaled[.02],0.}},ImageSize->(*Scaled[1]*)800]

Make the Components

Footnotes to represent Membership information

fn1=Superscript["",Style[1,FontFamily->"Helvetica",Gray]]Text[Style["HTC has the most up-to-date phones with 13 running 2.3 (Gingerbread)",
FontFamily->"Helvetica",Gray]]

fn2=Superscript["",Style[2,FontFamily->"Helvetica",Gray]]Text[Style["Discludes Kyocera, Casio,
 Huawei, and Pantech",
FontFamily->"Helvetica",Gray]]

Make the Components

Phone counts per Android version

pcts=Graphics[{
{EdgeForm[LightGray],Opacity[0.],Rectangle[Scaled[{0,0}],Scaled[{1,1}]]},
{Text[Style["6",FontFamily->"Helvetica",FontSize->160,Bold,Gray],Scaled[{.5,.6}]]},
{EdgeForm[LightGray],mLightGray,Rectangle[Scaled[{.25,-.25}],Scaled[{.75,.25}]]},
{Text[Style["2.1",FontFamily->"Helvetica",FontSize->80,Bold,Gray],Scaled[{.5,0}]]}
}]

pcts=Graphics[{
{EdgeForm[LightGray],Opacity[0.],Rectangle[Scaled[{0,0}],Scaled[{1,1}]]},
{Text[Style["6",FontFamily->"Helvetica",FontSize->60,Bold,Gray],Scaled[{.5,.6}]]},
{EdgeForm[LightGray],mLightGray,Rectangle[Scaled[{.25,-.25}],Scaled[{.75,.25}]]},
{Text[Style["2.1",FontFamily->"Helvetica",FontSize->30,Bold,Gray],Scaled[{.5,0}]]},

{EdgeForm[LightGray],Opacity[0.],Rectangle[Scaled[{1.25,0}],Scaled[{2.25,1}]]},
{Text[Style["23",FontFamily->"Helvetica",FontSize->60,Bold,Gray],Scaled[{1.75,.6}]]},
{EdgeForm[LightGray],mGray,Rectangle[Scaled[{1.5,-.25}],Scaled[{2.,.25}]]},
{Text[Style["2.2",FontFamily->"Helvetica",FontSize->30,Bold,White],Scaled[{1.75,0}]]},

{EdgeForm[LightGray],Opacity[0.],Rectangle[Scaled[{2.5,0}],Scaled[{3.5,1}]]},
{Text[Style["32",FontFamily->"Helvetica",FontSize->60,Bold,Gray],Scaled[{3.,.6}]]},
{EdgeForm[LightGray],mGreen,Rectangle[Scaled[{2.75,-.25}],Scaled[{3.25,.25}]]},
{Text[Style["2.3",FontFamily->"Helvetica",FontSize->30,Bold,White],Scaled[{3.,0}]]}

},ImageSize->(*Scaled[.5]*)400]

Make the Sub-Grid

Phone counts per Android version

lr=Grid[{{pcts,Graphics[{},ImageSize->80],fn2}},Alignment->Bottom]

Build Visualization

Assemble all the elements using Grid

infog=Grid[{{ti},{myBc},{fn1},{ti2},{lr}},Alignment->Left]

Advanced Control

Finer control of elements

logo=Graphics[{{mGreen,Disk[{0,0},300,{0,Pi}],mGray,Disk[{0,0},300,{Pi,2Pi}]},
{Gray,(*Translate[ban,{7,-1}],Red,*)ban,Gray,ban2}},ImageSize->120]

lr2=Grid[{{pcts,Graphics[{}], logo}}]

infog=Grid[{{ti},{myBc},{fn1},{ti2},{lr2},{fn2}(*{pcts},{fn2}*)},Alignment->Left]

Creating Effective Visualizations

Understanding Visual Coordinate Systems

Whitespace

Styles, Labels

Grid

Create Visualization from sub elements

infog=Grid[{{ti},{myBc},{fn1},{ti2},{lr}},Alignment->Left]

References

Wolfram Mathematica 8

Graphical Methods for Data Analysis (Cleveland et al., 1983)

androidandme.com

news.cnet.com

www.tinaja.com