import Highcharts
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let chartView = HIChartView(frame: view.bounds)
let options = HIOptions()
let chart = HIChart()
chart.type = "area"
options.chart = chart
let accessibility = HIAccessibility()
accessibility.definition = "Image description: An area chart compares the nuclear stockpiles of the USA and the USSR/Russia between 1945 and 2017. The number of nuclear weapons is plotted on the Y-axis and the years on the X-axis. The chart is interactive, and the year-on-year stockpile levels can be traced for each country. The US has a stockpile of 6 nuclear weapons at the dawn of the nuclear age in 1945. This number has gradually increased to 369 by 1950 when the USSR enters the arms race with 6 weapons. At this point, the US starts to rapidly build its stockpile culminating in 32,040 warheads by 1966 compared to the USSR’s 7,089. From this peak in 1966, the US stockpile gradually decreases as the USSR’s stockpile expands. By 1978 the USSR has closed the nuclear gap at 25,393. The USSR stockpile continues to grow until it reaches a peak of 45,000 in 1986 compared to the US arsenal of 24,401. From 1986, the nuclear stockpiles of both countries start to fall. By 2000, the numbers have fallen to 10,577 and 21,000 for the US and Russia, respectively. The decreases continue until 2017 at which point the US holds 4,018 weapons compared to Russia’s 4,500."
options.accessibility = accessibility
let title = HITitle()
title.text = "US and USSR nuclear stockpiles"
options.title = title
let subtitle = HISubtitle()
subtitle.text = "Sources: <a href=\"https://thebulletin.org/2006/july/global-nuclear-stockpiles-1945-2006\">thebulletin.org</a> & <a href=\"https://www.armscontrol.org/factsheets/Nuclearweaponswhohaswhat\">armscontrol.org</a>"
options.subtitle = subtitle
let xAxis = HIXAxis()
xAxis.allowDecimals = false
xAxis.labels = HILabels()
xAxis.labels.formatter = HIFunction(jsFunction: "function () { return this.value; }")
xAxis.accessibility = HIAccessibility()
xAxis.accessibility.rangeDescription = "Range: 1940 to 2017."
options.xAxis = [xAxis]
let yAxis = HIYAxis()
yAxis.title = HITitle()
yAxis.title.text = "Nuclear weapon states"
yAxis.labels = HILabels()
yAxis.labels.formatter = HIFunction(jsFunction: "function () { return this.value / 1000 + 'k'; }")
options.yAxis = [yAxis]
let tooltip = HITooltip()
tooltip.pointFormat = "{series.name} had stockpiled <b>{point.y:,.0f}</b><br/>warheads in {point.x}"
options.tooltip = tooltip
let plotOptions = HIPlotOptions()
plotOptions.area = HIArea()
plotOptions.area.pointStart = 1940
plotOptions.area.marker = HIMarker()
plotOptions.area.marker.enabled = false
plotOptions.area.marker.symbol = "circle"
plotOptions.area.marker.radius = 2
plotOptions.area.marker.states = HIStates()
plotOptions.area.marker.states.hover = HIHover()
plotOptions.area.marker.states.hover.enabled = true
options.plotOptions = plotOptions
let usa = HIArea()
usa.name = "USA"
usa.data = [
NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), 6, 11, 32, 110, 235,
369, 640, 1005, 1436, 2063, 3057, 4618, 6444, 9822, 15468,
20434, 24126, 27387, 29459, 31056, 31982, 32040, 31233, 29224, 27342,
26662, 26956, 27912, 28999, 28965, 27826, 25579, 25722, 24826, 24605,
24304, 23464, 23708, 24099, 24357, 24237, 24401, 24344, 23586, 22380,
21004, 17287, 14747, 13076, 12555, 12144, 11009, 10950, 10871, 10824,
10577, 10527, 10475, 10421, 10358, 10295, 10104, 9914, 9620, 9326,
5113, 5113, 4954, 4804, 4761, 4717, 4368, 4018
]
let ussrRussia = HIArea()
ussrRussia.name = "USSR/Russia"
ussrRussia.data = [NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), NSNull(), NSNull(),
5, 25, 50, 120, 150, 200, 426, 660, 869, 1060,
1605, 2471, 3322, 4238, 5221, 6129, 7089, 8339, 9399, 10538,
11643, 13092, 14478, 15915, 17385, 19055, 21205, 23044, 25393, 27935,
30062, 32049, 33952, 35804, 37431, 39197, 45000, 43000, 41000, 39000,
37000, 35000, 33000, 31000, 29000, 27000, 25000, 24000, 23000, 22000,
21000, 20000, 19000, 18000, 18000, 17000, 16000, 15537, 14162, 12787,
12600, 11400, 5500, 4512, 4502, 4502, 4500, 4500
]
options.series = [usa, ussrRussia]
chartView.options = options
self.view.addSubview(chartView)
}
}
#import <UIKit/UIKit.h>
#import <Highcharts/Highcharts.h>
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
HIChartView *chartView = [[HIChartView alloc] initWithFrame:self.view.bounds];
HIChart *chart = [[HIChart alloc]init];
chart.type = @"area";
HITitle *title = [[HITitle alloc]init];
title.text = @"US and USSR nuclear stockpiles";
HISubtitle *subtitle = [[HISubtitle alloc]init];
subtitle.text = @"Source: <a href=\"http://thebulletin.metapress.com/content/c4120650912x74k7/fulltext.pdf\">thebulletin.metapress.com</a>";
HIXAxis *xaxis = [[HIXAxis alloc]init];
xaxis.allowDecimals = [[NSNumber alloc] initWithBool:false];
xaxis.labels = [[HILabels alloc] init];
xaxis.labels.formatter = [[HIFunction alloc] initWithJSFunction:@"function () { return this.value; /* clean, unformatted number for year */ }"];
HIYAxis *yaxis = [[HIYAxis alloc]init];
yaxis.title = [[HITitle alloc]init];
yaxis.title.text = @"Nuclear weapon states";
yaxis.labels = [[HILabels alloc] init];
yaxis.labels.formatter = [[HIFunction alloc] initWithJSFunction:@"function () { return this.value / 1000 + 'k'; }"];
HITooltip *tooltip = [[HITooltip alloc]init];
tooltip.pointFormat = @"{series.name} produced <b>{point.y:,.0f}</b><br/>warheads in {point.x}";
HIPlotOptions *plotOptions = [[HIPlotOptions alloc]init];
plotOptions.area = [[HIArea alloc]init];
plotOptions.area.pointStart = @1940;
plotOptions.area.marker = [[HIMarker alloc]init];
plotOptions.area.marker.enabled = [[NSNumber alloc] initWithBool:false];
plotOptions.area.marker.symbol = @"circle";
plotOptions.area.marker.radius = @2;
plotOptions.area.marker.states = [[HIStates alloc]init];
plotOptions.area.marker.states.hover = [[HIHover alloc]init];
plotOptions.area.marker.states.hover.enabled = [[NSNumber alloc] initWithBool:true];
HIArea *series1 = [[HIArea alloc]init];
series1.name = @"USA";
series1.data = [NSMutableArray arrayWithObjects:[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
@6,
@11,
@32,
@110,
@235,
@369,
@640,
@1005,
@1436,
@2063,
@3057,
@4618,
@6444,
@9822,
@15468,
@20434,
@24126,
@27387,
@29459,
@31056,
@31982,
@32040,
@31233,
@29224,
@27342,
@26662,
@26956,
@27912,
@28999,
@28965,
@27826,
@25579,
@25722,
@24826,
@24605,
@24304,
@23464,
@23708,
@24099,
@24357,
@24237,
@24401,
@24344,
@23586,
@22380,
@21004,
@17287,
@14747,
@13076,
@12555,
@12144,
@11009,
@10950,
@10871,
@10824,
@10577,
@10527,
@10475,
@10421,
@10358,
@10295,
@10104, nil];
HIArea *series2 = [[HIArea alloc]init];
series2.name = @"USSR/Russia";
series2.data = [NSMutableArray arrayWithObjects:[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
[NSNull null],
@5,
@25,
@50,
@120,
@150,
@200,
@426,
@660,
@869,
@1060,
@1605,
@2471,
@3322,
@4238,
@5221,
@6129,
@7089,
@8339,
@9399,
@10538,
@11643,
@13092,
@14478,
@15915,
@17385,
@19055,
@21205,
@23044,
@25393,
@27935,
@30062,
@32049,
@33952,
@35804,
@37431,
@39197,
@45000,
@43000,
@41000,
@39000,
@37000,
@35000,
@33000,
@31000,
@29000,
@27000,
@25000,
@24000,
@23000,
@22000,
@21000,
@20000,
@19000,
@18000,
@18000,
@17000,
@16000, nil];
HIOptions *options = [[HIOptions alloc]init];
options.chart = chart;
options.title = title;
options.subtitle = subtitle;
options.xAxis = [NSMutableArray arrayWithObject:xaxis];
options.yAxis = [NSMutableArray arrayWithObject:yaxis];
options.tooltip = tooltip;
options.plotOptions = plotOptions;
options.series = [NSMutableArray arrayWithObjects:series1, series2, nil];
chartView.options = options;
[self.view addSubview:chartView];
}
@end