Skip to content

Commit ef763ac

Browse files
committed
New chart: Choropleth map
1 parent c40ef56 commit ef763ac

File tree

6 files changed

+115
-2
lines changed

6 files changed

+115
-2
lines changed

FSharp.Plotly.sln

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "content", "content", "{8E6D
3535
docs\content\bar-charts.fsx = docs\content\bar-charts.fsx
3636
docs\content\box-plots.fsx = docs\content\box-plots.fsx
3737
docs\content\bubble-charts.fsx = docs\content\bubble-charts.fsx
38+
docs\content\choropleth-map.fsx = docs\content\choropleth-map.fsx
3839
docs\content\contour-plots.fsx = docs\content\contour-plots.fsx
3940
docs\content\errorbars.fsx = docs\content\errorbars.fsx
4041
docs\content\extensions.fsx = docs\content\extensions.fsx

docs/content/choropleth-map.fsx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
(*** hide ***)
2+
#r "../../bin/Newtonsoft.Json.dll"
3+
#r "../../bin/FSharp.Plotly.dll"
4+
5+
(**
6+
# FSharp.Plotly: BoxPlot Charts
7+
8+
*Summary:* This example shows how to create boxplot charts in F#.
9+
10+
A box plot or boxplot is a convenient way of graphically depicting groups of numerical data through their quartiles.
11+
Box plots may also have lines extending vertically from the boxes (whiskers) indicating variability outside the upper
12+
and lower quartiles, hence the terms box-and-whisker plot and box-and-whisker diagram.
13+
Outliers may be plotted as individual points.
14+
*)
15+
16+
open FSharp.Plotly
17+
18+
let locations,z =
19+
[("Belarus",17.5); ("Moldova",16.8);("Lithuania",15.4);("Russia",15.1);("Romania",14.4);("Ukraine",13.9);
20+
("Andorra",13.8);("Hungary",13.3);("Czech Republic",13.);("Slovakia",13.);("Portugal",12.9);("Serbia",12.6);
21+
("Grenada",12.5);("Poland",12.5);("Latvia",12.3);("Finland",12.3);("South Korea",12.3);("France",12.2);
22+
("Australia",12.2);("Croatia",12.2);("Ireland",11.9);("Luxembourg",11.9);("Germany",11.8);("Slovenia",11.6);
23+
("United Kingdom",11.6);("Denmark",11.4);("Bulgaria",11.4);("Spain",11.2);("Belgium",11.);("South Africa",11.);
24+
("New Zealand",10.9);("Gabon",10.9);("Namibia",10.8);("Switzerland",10.7);("Saint Lucia",10.4);
25+
("Austria",10.3);("Estonia",10.3);("Greece",10.3);("Kazakhstan",10.3);("Canada",10.2);("Nigeria",10.1);
26+
("Netherlands",9.9);("Uganda",9.8);("Rwanda",9.8);("Chile",9.6);("Argentina",9.3);("Burundi",9.3);
27+
("United States",9.2);("Cyprus",9.2);("Sweden",9.2);("Venezuela",8.9);("Paraguay",8.8);("Brazil",8.7);
28+
("Sierra Leone",8.7);("Montenegro",8.7);("Belize",8.5);("Cameroon",8.4);("Botswana",8.4);("Saint Kitts and Nevis",8.2);
29+
("Guyana",8.1);("Peru",8.1);("Panama",8.);("Niue",8.);("Palau",7.9);("Norway",7.7);("Tanzania",7.7);("Georgia",7.7);
30+
("Uruguay",7.6);("Angola",7.5);("Laos",7.3);("Japan",7.2);("Mexico",7.2);("Ecuador",7.2);("Dominica",7.1);
31+
("Iceland",7.1);("Thailand",7.1);("Bosnia and Herzegovina",7.1);("Sao Tome and Principe",7.1);("Malta",7.);
32+
("Albania",7.);("Bahamas",6.9);("Dominican Republic",6.9);("Mongolia",6.9);("Cape Verde",6.9);("Barbados",6.8);
33+
("Burkina Faso",6.8);("Italy",6.7);("Trinidad and Tobago",6.7);("China",6.7);("Macedonia",6.7);
34+
("Saint Vincent and the Grenadines",6.6);("Equatorial Guinea",6.6);("Suriname",6.6);("Vietnam",6.6);
35+
("Lesotho",6.5);("Haiti",6.4);("Cook Islands",6.4);("Colombia",6.2);("Ivory Coast",6.);("Bolivia",5.9);
36+
("Swaziland",5.7);("Zimbabwe",5.7);("Seychelles",5.6);("Cambodia",5.5);("Puerto Rico",5.4);("Netherlands Antilles",5.4);
37+
("Philippines",5.4);("Costa Rica",5.4);("Armenia",5.3);("Cuba",5.2);("Nicaragua",5.);("Jamaica",4.9);("Ghana",4.8);
38+
("Liberia",4.7);("Uzbekistan",4.6);("Chad",4.4);("United Arab Emirates",4.3);("Kyrgyzstan",4.3);
39+
("India",4.3);("Turkmenistan",4.3);("Kenya",4.3);("Ethiopia",4.2);("Honduras",4.);("Guinea-Bissau",4.);("Zambia",4.);
40+
("Republic of the Congo",3.9);("Guatemala",3.8);("Central African Republic",3.8);("North Korea",3.7);("Sri Lanka",3.7);
41+
("Mauritius",3.6);("Samoa",3.6);("Democratic Republic of the Congo",3.6);("Nauru",3.5);("Gambia",3.4);
42+
("Federated States of Micronesia",3.3);("El Salvador",3.2);("Fiji",3.);("Papua New Guinea",3.);("Kiribati",3.);
43+
("Tajikistan",2.8);("Israel",2.8);("Sudan",2.7);("Malawi",2.5);("Lebanon",2.4);("Azerbaijan",2.3);("Mozambique",2.3);
44+
("Togo",2.3);("Nepal",2.2);("Brunei",2.1);("Benin",2.1);("Singapore",2.);("Turkey",2.);("Madagascar",1.8);("Solomon Islands",1.7);
45+
("Tonga",1.6);("Tunisia",1.5);("Tuvalu",1.5);("Qatar",1.5);("Vanuatu",1.4);("Djibouti",1.3);("Malaysia",1.3);
46+
("Syria",1.2);("Maldives",1.2);("Mali",1.1);("Eritrea",1.1);("Algeria",1.);("Iran",1.);("Oman",0.9);("Brunei",0.9);
47+
("Morocco",0.9);("Jordan",0.7);("Bhutan",0.7);("Guinea",0.7);("Burma",0.7);("Afghanistan",0.7);("Senegal",0.6);
48+
("Indonesia",0.6);("Timor-Leste",0.6);("Iraq",0.5);("Somalia",0.5);("Egypt",0.4);("Niger",0.3);("Yemen",0.3);
49+
("Comoros",0.2);("Saudi Arabia",0.2);("Bangladesh",0.2);("Kuwait",0.1);("Libya",0.1);("Mauritania",0.1);("Pakistan",0.1);]
50+
|> List.unzip
51+
52+
Chart.ChoroplethMap(locations,z,Locationmode=StyleParam.LocationFormat.CountryNames)
53+
|> Chart.Show

docs/tools/templates/template.cshtml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
<li><a href="@Root/polar-charts.html">Polar Charts</a></li>
5959
<li><a href="@Root/windrose-charts.html">Windrose Charts</a></li>
6060
<li><a href="@Root/range-plots.html">Range Plots</a></li>
61+
<li class="nav-header">Map Charts</li>
62+
<li><a href="@Root/choropleth-map.html">Choropleth</a></li>
6163
<li class="nav-header">Plotly 3d-Charts</li>
6264
<li><a href="@Root/3d-scatter-plots.html">3D Scatter Plots</a></li>
6365
<li><a href="@Root/3d-line-plots.html">3D Line Plots</a></li>

src/FSharp.Plotly/Chart.fs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -472,9 +472,16 @@ type Chart =
472472
)
473473
|> TraceStyle.Line(?Width=Width,?Color=Color,?Dash=Dash,?Colorscale=Colorscale)
474474
|> GenericChart.ofTraceObject
475-
476475

477-
476+
477+
/// Computes the choropleth map plot
478+
static member ChoroplethMap(locations,z,?Text,?Locationmode,?Autocolorscale,?Colorscale,?Colorbar,?Marker,?Zmin,?Zmax) =
479+
Trace.initChoroplethMap (
480+
TraceStyle.ChoroplethMap (Locations=locations,Z=z,?Text=Text,?Locationmode=Locationmode,?Autocolorscale=Autocolorscale,
481+
?Colorscale=Colorscale,?Colorbar=Colorbar,?Marker=Marker,?Zmin=Zmin,?Zmax=Zmax)
482+
)
483+
|> GenericChart.ofTraceObject
484+
478485
// ---------------------------------------------------------------------------------------------------------------------------------------------------
479486
// 3d - Chart --->
480487

src/FSharp.Plotly/StyleParams.fs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -697,6 +697,19 @@ module StyleParam =
697697

698698
static member convert = AxisId.toString >> box
699699

700+
/// Determines the set of locations used to match entries in `locations` to regions on the map. Default: ISO-3
701+
type LocationFormat =
702+
| CountryNames
703+
| ISO_3
704+
| USA_states
705+
706+
static member toString = function
707+
| CountryNames -> "country names"
708+
| ISO_3 -> "ISO-3"
709+
| USA_states -> "USA-states"
710+
711+
static member convert = LocationFormat.toString >> box
712+
700713
// hoverinfo (flaglist string)
701714
//Any combination of "x", "y", "z", "text", "name" joined with a "+" OR "all" or "none" or "skip".
702715
//examples: "x", "y", "x+y", "x+y+z", "all"

src/FSharp.Plotly/Trace.fs

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ module Trace =
6363
let initParallelCoord (applyStyle:Trace->Trace) =
6464
Trace("parcoords") |> applyStyle
6565

66+
/// Init trace for a choropleth map
67+
let initChoroplethMap (applyStyle:Trace->Trace) =
68+
Trace("choropleth") |> applyStyle
6669

6770
/// Functions provide the styling of the Chart objects
6871
type TraceStyle() =
@@ -878,5 +881,39 @@ module Trace =
878881
)
879882

880883

884+
// Applies the styles of choropleth map plot to TraceObjects
885+
static member ChoroplethMap
886+
(
887+
?Locations : seq<string>,
888+
?Z : seq<#IConvertible>,
889+
?Text : seq<#IConvertible>,
890+
?Locationmode ,
891+
?Autocolorscale : bool,
892+
?Colorscale,
893+
?Colorbar,
894+
?Marker : Marker,
895+
?Zmin,
896+
?Zmax
897+
898+
899+
) =
900+
(fun (choropleth:('T :> Trace)) ->
901+
902+
Locations |> DynObj.setValueOpt choropleth "locations"
903+
Z |> DynObj.setValueOpt choropleth "z"
904+
Text |> DynObj.setValueOpt choropleth "text"
905+
Locationmode |> DynObj.setValueOptBy choropleth "locationmode" StyleParam.LocationFormat.convert
906+
Autocolorscale |> DynObj.setValueOpt choropleth "autocolorscale"
907+
908+
Colorscale |> DynObj.setValueOptBy choropleth "colorscale" StyleParam.Colorscale.convert
909+
Colorbar |> DynObj.setValueOpt choropleth "colorbar"
910+
Marker |> DynObj.setValueOpt choropleth "marker"
911+
Zmin |> DynObj.setValueOpt choropleth "zmin"
912+
Zmax |> DynObj.setValueOpt choropleth "zmax"
913+
914+
// out ->
915+
choropleth
916+
)
917+
881918

882919

0 commit comments

Comments
 (0)