In [2]:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import math
# set up orthographic map projection with
# perspective of satellite looking down at 50N, 100W.
# use low resolution coastlines.
# don't plot features that are smaller than 1000 square km.
plt.figure(figsize=(14,14))
map = Basemap(projection='lcc',lat_0 = 3, lon_0 = 0, width=5000000,height=4000000,
area_thresh = 2000., resolution='l')
shp_info_path = "/Users/fransua/Downloads/basemap-1.0.7/examples/st99_d00"
shp_info = map.readshapefile(shp_info_path,'states',drawbounds=True)
# draw coastlines, country boundaries, fill continents.
map.drawcoastlines()
map.drawcountries()
map.drawmapscale(-15, -13, -15, -13, 1000)
map.fillcontinents(color = 'lightgrey')
#map.drawrivers()
#map.etopo()
# draw the edge of the map projection region (the projection limb)
map.drawmapboundary()
# draw lat/lon grid lines every 30 degrees.
map.drawmeridians(np.arange(0, 360, 10))
map.drawparallels(np.arange(-90, 90, 10))
Out[2]:
In [3]:
country_coords = """
AD 42.546245 1.601554 Andorra
AE 23.424076 53.847818 United Arab Emirates
AF 33.93911 67.709953 Afghanistan
AG 17.060816 -61.796428 Antigua and Barbuda
AI 18.220554 -63.068615 Anguilla
AL 41.153332 20.168331 Albania
AM 40.069099 45.038189 Armenia
AN 12.226079 -69.060087 Netherlands Antilles
AO -11.202692 17.873887 Angola
AQ -75.250973 -0.071389 Antarctica
AR -38.416097 -63.616672 Argentina
AS -14.270972 -170.132217 American Samoa
AT 47.516231 14.550072 Austria
AU -25.274398 133.775136 Australia
AW 12.52111 -69.968338 Aruba
AZ 40.143105 47.576927 Azerbaijan
BA 43.915886 17.679076 Bosnia and Herzegovina
BB 13.193887 -59.543198 Barbados
BD 23.684994 90.356331 Bangladesh
BE 50.503887 4.469936 Belgium
BF 12.238333 -1.561593 Burkina Faso
BG 42.733883 25.48583 Bulgaria
BH 25.930414 50.637772 Bahrain
BI -3.373056 29.918886 Burundi
BJ 9.30769 2.315834 Benin
BM 32.321384 -64.75737 Bermuda
BN 4.535277 114.727669 Brunei
BO -16.290154 -63.588653 Bolivia
BR -14.235004 -51.92528 Brazil
BS 25.03428 -77.39628 Bahamas
BT 27.514162 90.433601 Bhutan
BV -54.423199 3.413194 Bouvet Island
BW -22.328474 24.684866 Botswana
BY 53.709807 27.953389 Belarus
BZ 17.189877 -88.49765 Belize
CA 56.130366 -106.346771 Canada
CC -12.164165 96.870956 Cocos [Keeling] Islands
CD -4.038333 21.758664 Congo [DRC]
CF 6.611111 20.939444 Central African Republic
CG -0.228021 15.827659 Congo [Republic]
CH 46.818188 8.227512 Switzerland
CI 7.539989 -5.54708 Côte d'Ivoire
CK -21.236736 -159.777671 Cook Islands
CL -35.675147 -71.542969 Chile
CM 7.369722 12.354722 Cameroon
CN 35.86166 104.195397 China
CO 4.570868 -74.297333 Colombia
CR 9.748917 -83.753428 Costa Rica
CU 21.521757 -77.781167 Cuba
CV 16.002082 -24.013197 Cape Verde
CX -10.447525 105.690449 Christmas Island
CY 35.126413 33.429859 Cyprus
CZ 49.817492 15.472962 Czech Republic
DE 51.165691 10.451526 Germany
DJ 11.825138 42.590275 Djibouti
DK 56.26392 9.501785 Denmark
DM 15.414999 -61.370976 Dominica
DO 18.735693 -70.162651 Dominican Republic
DZ 28.033886 1.659626 Algeria
EC -1.831239 -78.183406 Ecuador
EE 58.595272 25.013607 Estonia
EG 26.820553 30.802498 Egypt
EH 24.215527 -12.885834 Western Sahara
ER 15.179384 39.782334 Eritrea
ES 40.463667 -3.74922 Spain
ET 9.145 40.489673 Ethiopia
FI 61.92411 25.748151 Finland
FJ -16.578193 179.414413 Fiji
FK -51.796253 -59.523613 Falkland Islands [Islas Malvinas]
FM 7.425554 150.550812 Micronesia
FO 61.892635 -6.911806 Faroe Islands
FR 46.227638 2.213749 France
GA -0.803689 11.609444 Gabon
GB 55.378051 -3.435973 United Kingdom
GD 12.262776 -61.604171 Grenada
GE 42.315407 43.356892 Georgia
GF 3.933889 -53.125782 French Guiana
GG 49.465691 -2.585278 Guernsey
GH 7.946527 -1.023194 Ghana
GI 36.137741 -5.345374 Gibraltar
GL 71.706936 -42.604303 Greenland
GM 13.443182 -15.310139 Gambia
GN 9.945587 -9.696645 Guinea
GP 16.995971 -62.067641 Guadeloupe
GQ 1.650801 10.267895 Equatorial Guinea
GR 39.074208 21.824312 Greece
GS -54.429579 -36.587909 South Georgia and the South Sandwich Islands
GT 15.783471 -90.230759 Guatemala
GU 13.444304 144.793731 Guam
GW 11.803749 -15.180413 Guinea-Bissau
GY 4.860416 -58.93018 Guyana
GZ 31.354676 34.308825 Gaza Strip
HK 22.396428 114.109497 Hong Kong
HM -53.08181 73.504158 Heard Island and McDonald Islands
HN 15.199999 -86.241905 Honduras
HR 45.1 15.2 Croatia
HT 18.971187 -72.285215 Haiti
HU 47.162494 19.503304 Hungary
ID -0.789275 113.921327 Indonesia
IE 53.41291 -8.24389 Ireland
IL 31.046051 34.851612 Israel
IM 54.236107 -4.548056 Isle of Man
IN 20.593684 78.96288 India
IO -6.343194 71.876519 British Indian Ocean Territory
IQ 33.223191 43.679291 Iraq
IR 32.427908 53.688046 Iran
IS 64.963051 -19.020835 Iceland
IT 41.87194 12.56738 Italy
JE 49.214439 -2.13125 Jersey
JM 18.109581 -77.297508 Jamaica
JO 30.585164 36.238414 Jordan
JP 36.204824 138.252924 Japan
KE -0.023559 37.906193 Kenya
KG 41.20438 74.766098 Kyrgyzstan
KH 12.565679 104.990963 Cambodia
KI -3.370417 -168.734039 Kiribati
KM -11.875001 43.872219 Comoros
KN 17.357822 -62.782998 Saint Kitts and Nevis
KP 40.339852 127.510093 North Korea
KR 35.907757 127.766922 South Korea
KW 29.31166 47.481766 Kuwait
KY 19.513469 -80.566956 Cayman Islands
KZ 48.019573 66.923684 Kazakhstan
LA 19.85627 102.495496 Laos
LB 33.854721 35.862285 Lebanon
LC 13.909444 -60.978893 Saint Lucia
LI 47.166 9.555373 Liechtenstein
LK 7.873054 80.771797 Sri Lanka
LR 6.428055 -9.429499 Liberia
LS -29.609988 28.233608 Lesotho
LT 55.169438 23.881275 Lithuania
LU 49.815273 6.129583 Luxembourg
LV 56.879635 24.603189 Latvia
LY 26.3351 17.228331 Libya
MA 31.791702 -7.09262 Morocco
MC 43.750298 7.412841 Monaco
MD 47.411631 28.369885 Moldova
ME 42.708678 19.37439 Montenegro
MG -18.766947 46.869107 Madagascar
MH 7.131474 171.184478 Marshall Islands
MK 41.608635 21.745275 Macedonia [FYROM]
ML 17.570692 -3.996166 Mali
MM 21.913965 95.956223 Myanmar [Burma]
MN 46.862496 103.846656 Mongolia
MO 22.198745 113.543873 Macau
MP 17.33083 145.38469 Northern Mariana Islands
MQ 14.641528 -61.024174 Martinique
MR 21.00789 -10.940835 Mauritania
MS 16.742498 -62.187366 Montserrat
MT 35.937496 14.375416 Malta
MU -20.348404 57.552152 Mauritius
MV 3.202778 73.22068 Maldives
MW -13.254308 34.301525 Malawi
MX 23.634501 -102.552784 Mexico
MY 4.210484 101.975766 Malaysia
MZ -18.665695 35.529562 Mozambique
NA -22.95764 18.49041 Namibia
NC -20.904305 165.618042 New Caledonia
NE 17.607789 8.081666 Niger
NF -29.040835 167.954712 Norfolk Island
NG 9.081999 8.675277 Nigeria
NI 12.865416 -85.207229 Nicaragua
NL 52.132633 5.291266 Netherlands
NO 60.472024 8.468946 Norway
NP 28.394857 84.124008 Nepal
NR -0.522778 166.931503 Nauru
NU -19.054445 -169.867233 Niue
NZ -40.900557 174.885971 New Zealand
OM 21.512583 55.923255 Oman
PA 8.537981 -80.782127 Panama
PE -9.189967 -75.015152 Peru
PF -17.679742 -149.406843 French Polynesia
PG -6.314993 143.95555 Papua New Guinea
PH 12.879721 121.774017 Philippines
PK 30.375321 69.345116 Pakistan
PL 51.919438 19.145136 Poland
PM 46.941936 -56.27111 Saint Pierre and Miquelon
PN -24.703615 -127.439308 Pitcairn Islands
PR 18.220833 -66.590149 Puerto Rico
PS 31.952162 35.233154 Palestinian Territories
PT 39.399872 -8.224454 Portugal
PW 7.51498 134.58252 Palau
PY -23.442503 -58.443832 Paraguay
QA 25.354826 51.183884 Qatar
RE -21.115141 55.536384 Réunion
RO 45.943161 24.96676 Romania
RS 44.016521 21.005859 Serbia
RU 61.52401 105.318756 Russia
RW -1.940278 29.873888 Rwanda
SA 23.885942 45.079162 Saudi Arabia
SB -9.64571 160.156194 Solomon Islands
SC -4.679574 55.491977 Seychelles
SD 12.862807 30.217636 Sudan
SE 60.128161 18.643501 Sweden
SG 1.352083 103.819836 Singapore
SH -24.143474 -10.030696 Saint Helena
SI 46.151241 14.995463 Slovenia
SJ 77.553604 23.670272 Svalbard and Jan Mayen
SK 48.669026 19.699024 Slovakia
SL 8.460555 -11.779889 Sierra Leone
SM 43.94236 12.457777 San Marino
SN 14.497401 -14.452362 Senegal
SO 5.152149 46.199616 Somalia
SR 3.919305 -56.027783 Suriname
ST 0.18636 6.613081 São Tomé and Príncipe
SV 13.794185 -88.89653 El Salvador
SY 34.802075 38.996815 Syria
SZ -26.522503 31.465866 Swaziland
TC 21.694025 -71.797928 Turks and Caicos Islands
TD 15.454166 18.732207 Chad
TF -49.280366 69.348557 French Southern Territories
TG 8.619543 0.824782 Togo
TH 15.870032 100.992541 Thailand
TJ 38.861034 71.276093 Tajikistan
TK -8.967363 -171.855881 Tokelau
TL -8.874217 125.727539 Timor-Leste
TM 38.969719 59.556278 Turkmenistan
TN 33.886917 9.537499 Tunisia
TO -21.178986 -175.198242 Tonga
TR 38.963745 35.243322 Turkey
TT 10.691803 -61.222503 Trinidad and Tobago
TV -7.109535 177.64933 Tuvalu
TW 23.69781 120.960515 Taiwan
TZ -6.369028 34.888822 Tanzania
UA 48.379433 31.16558 Ukraine
UG 1.373333 32.290275 Uganda
UM 19.2784823 166.653968 U.S. Minor Outlying Islands
US 37.09024 -95.712891 United States
UY -32.522779 -55.765835 Uruguay
UZ 41.377491 64.585262 Uzbekistan
VA 41.902916 12.453389 Vatican City
VC 12.984305 -61.287228 Saint Vincent and the Grenadines
VE 6.42375 -66.58973 Venezuela
VG 18.420695 -64.639968 British Virgin Islands
VI 18.335765 -64.896335 U.S. Virgin Islands
VN 14.058324 108.277199 Vietnam
VU -15.376706 166.959158 Vanuatu
WF -13.768752 -177.156097 Wallis and Futuna
WS -13.759029 -172.104629 Samoa
XK 42.602636 20.902977 Kosovo
YE 15.552727 48.516388 Yemen
YT -12.8275 45.166244 Mayotte
ZA -30.559482 22.937506 South Africa
ZM -13.133897 27.849332 Zambia
ZW -19.015438 29.154857 Zimbabwe
"""
country_coords = dict([(c.split('\t')[3], (float(c.split('\t')[1]), float(c.split('\t')[2]))) if c.split('\t')[1]
else (c.split('\t')[3], (0, 0)) for c in country_coords.split('\n') if len(c.split('\t'))>2])
In [4]:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import math
# set up orthographic map projection with
# perspective of satellite looking down at 50N, 100W.
# use low resolution coastlines.
# don't plot features that are smaller than 1000 square km.
plt.figure(figsize=(14,14))
map = Basemap(projection='lcc',lat_0 = 3, lon_0 = 0, width=5000000,height=4000000,
area_thresh = 2000., resolution='l')
shp_info_path = "/Users/fransua/Downloads/basemap-1.0.7/examples/st99_d00"
shp_info = map.readshapefile(shp_info_path,'states',drawbounds=True)
# draw coastlines, country boundaries, fill continents.
map.drawcoastlines()
map.drawcountries()
map.drawmapscale(-15, -13, -15, -13, 1000)
#map.fillcontinents(color = 'lightgrey')
map.drawrivers(color='blue')
#map.etopo()
map.shadedrelief()
# draw the edge of the map projection region (the projection limb)
map.drawmapboundary()
# draw lat/lon grid lines every 30 degrees.
map.drawmeridians(np.arange(0, 360, 10))
map.drawparallels(np.arange(-90, 90, 10))
for country in ['Guinea', 'Nigeria']:
# some points on a circle cos,sin
xo, yo = map(country_coords[country][1], country_coords[country][0])
plt.plot(xo, yo, 'ro')
plt.text(xo, yo + 20000, country, va='bottom', ha='center')
In [6]:
import matplotlib.dates as mdates
# from http://www.who.int/csr/don/archive/disease/ebola/en/
data = """
DATE Guinea Liberia Sierra Leone Nigeria
22.03.2014 49/29
24.03.2014 86/59
25.03.2014 86/60
26.03.2014 86/62
27.03.2014 103/66
28.03.2014 112/70 2/0
31.03.2014 122/80 8/2 2/2
01.04.2014 127/83 8/5 2/2
05.04.2014 143/86 18/7 2/2
07.04.2014 151/95 21/10 2/2
09.04.2014 158/101 20/10 2/2
10.04.2014 158/101 20/12 2/2
14.04.2014 168/108 26/13 2/2
16.04.2014 197/122 27/13 2/2
17.04.2014 203/129 27/13 2/2
20.04.2014 208/136 34/11 2/2
23.04.2014 218/141 35/11 2/2
26.04.2014 224/143 35/11 2/2
01.05.2014 226/149 13/11 2/2
03.05.2014 231/155 13/11 2/2
05.05.2014 235/157 13/11 2/2
07.05.2014 236/158 13/11 2/2
10.05.2014 233/157 12/11 2/2
12.05.2014 248/171 12/11 2/2
23.05.2014 258/174 12/11 2/2
27.05.2014 281/186 12/11 16/5
29.05.2014 291/193 12/11 50/6
01.06.2014 328/208 12/11 79/6
03.06.2014 344/215 12/11 79/6
05.06.2014 344/215 12/11 81/6
10.06.2014 351/226 12/11 89/7
17.06.2014 398/264 33/24 97/49
19.06.2014 390/267 41/25 136/58
22.06.2014 390/270 51/34 158/34
30.06.2014 413/303 107/65 239/99
02.07.2014 412/305 115/75 252/101
06.07.2014 408/307 131/84 305/127
08.07.2014 409/309 142/88 337/142
12.07.2014 406/304 172/105 386/194
14.07.2014 411/310 174/106 397/197
17.07.2014 410/310 196/116 442/206
20.07.2014 415/314 224/127 454/219
23.07.2014 427/319 249/129 525/224
27.07.2014 460/339 329/156 533/233 1/1
01.08.2014 485/358 468/255 646/273 4/1
04.08.2014 495/363 516/282 691/286 9/1
06.08.2014 495/367 554/294 717/298 13/2
09.08.2014 506/373 599/323 730/315 13/2
11.08.2014 510/377 670/355 783/334 12/3
13.08.2014 519/380 786/413 810/348 12/4
16.08.2014 543/394 834/466 848/365 15/4
18.08.2014 579/396 972/576 907/374 15/4
20.08.2014 607/406 1082/624 910/392 16/4
"""
countries = {}
dates = []
for day in data.split('\n'):
if not day:
continue
if day.startswith("DATE"):
country_list = day.split('\t')[1:]
continue
date = [int(i) for i in day.split()[0].split('.')]
data = [v if v else '0/0' for v in day.split('\t')[1:]]
dates.append(date)
for i, country in enumerate(country_list):
countries.setdefault(country, []).append((int(data[i].split('/')[0]), int(data[i].split('/')[1])))
# clean data, remove false casualties:
#for c in countries:
# maxd = 0
# maxi = 0
# for j, (d, i) in enumerate(countries[c]):
# if d > maxd:
# maxd = d
# if i > maxi:
# maxi = i
# countries[c][j] = (maxd, maxi)
dates = [mdates.datetime.datetime(*d[::-1]) for d in dates]
In [ ]:
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
import math
from scipy.optimize import curve_fit
from scipy.stats import t as t_distr
fig = plt.figure(figsize=(18, 11.4))
map = Basemap(projection='lcc',lat_0 = 7.0, lon_0 = .1, width=4000000, height=3000000,
area_thresh = 500., resolution='l')
shp_info_path = "/Users/fransua/Downloads/basemap-1.0.7/examples/st99_d00"
shp_info = map.readshapefile(shp_info_path,'states',drawbounds=True)
# draw coastlines, country boundaries, fill continents.
#map.drawcoastlines()
map.drawrivers(color='lightblue')
map.drawcountries()
#map.drawmapscale(-15, -6, -15, -6, 500)
#map.fillcontinents(color = 'lightgrey')
# map.etopo()
map.shadedrelief()
# draw the edge of the map projection region (the projection limb)
map.drawmapboundary()
# draw lat/lon grid lines every 30 degrees.
# map.drawmeridians(np.arange(0, 360, 10))
# map.drawparallels(np.arange(-90, 90, 10))
for country in country_coords:
if country in countries:
continue
# some points on a circle cos,sin
xo, yo = map(country_coords[country][1], country_coords[country][0])
if plt.xlim()[0]<xo<plt.xlim()[1]:
if plt.ylim()[0]<yo<plt.ylim()[1]:
plt.text(xo, yo, unicode(country, 'utf-8'),
va='center', ha='center', color='grey', zorder=1000, weight='bold')
xxx = []
yyy = []
xy1s = []
xy2s = []
cmonth = None
months = []
for i, d in enumerate(dates):
if cmonth == d.month:
continue
cmonth = d.month
months.append(i)
sizes = [[] for _ in xrange(len(months) + 1)]
for country in countries:
# some points on a circle cos,sin
xo, yo = map(country_coords[country][1], country_coords[country][0])
xxx.append(xo)
yyy.append(yo)
sizes[-1].append(countries[country][-1][0] * 15)
for m in xrange(len(months)):
sizes[m].append(countries[country][months[m]][0] * 15)
plt.text(xo, yo + 20000, unicode(country), va='bottom', ha='center', color='black', zorder=1000,
weight='bold', size=13)
scat = []
for size in sizes:
scat.append(plt.scatter(xxx, yyy, s=size, facecolor='red', edgecolor='darkred', zorder=100, alpha=.1, linewidth=1))
plt.scatter(xxx, yyy, s=size, facecolor='none', edgecolor='darkred', zorder=100, alpha=.4, linewidth=1)
months = mdates.MonthLocator() # every month
days = mdates.DayLocator() # every month
# http://strftime.org/
yearsFmt = mdates.DateFormatter("%B")
ax2 = fig.add_subplot(111, axisbelow=False, frame_on=False)
ax2.xaxis.set_major_locator(months)
ax2.xaxis.set_major_formatter(yearsFmt)
# ax2.xaxis.set_minor_locator(days)
datemin = min(dates)
datemax = max(dates)
ax2.set_xlim(datemin, mdates.datetime.datetime(datemax.year, datemax.month, datemax.day.real + 10))
y1max = [sum([countries[c][i][0] for c in countries]) for i in xrange(len(dates))][-1]
y2max = [sum([countries[c][i][1] for c in countries]) for i in xrange(len(dates))][-1]
ax2.set_ylim(0, y1max + 100)
#ax2.text(dates[-1], y1max + 40, ' Infected', horizontalalignment='center',
# verticalalignment='bottom', color='darkorange', weight='bold', size=14)
#ax2.text(dates[-1], y2max + 40, ' Fatalities', horizontalalignment='center',
# verticalalignment='bottom', color='darkred', weight='bold', size=14)
ax2.plot(dates, [sum([countries[c][i][0] for c in countries]) for i in xrange(len(dates))], lw=3, c='k', alpha=.7)
line1 = ax2.plot(dates, [sum([countries[c][i][0] for c in countries]) for i in xrange(len(dates))], lw=2, c='darkorange', alpha=1)
ax2.plot(dates, [sum([countries[c][i][1] for c in countries]) for i in xrange(len(dates))], lw=3, c='k', alpha=.7)
line2 = ax2.plot(dates, [sum([countries[c][i][1] for c in countries]) for i in xrange(len(dates))], lw=2, c='darkred', alpha=1)
ax2.set_ylabel('Casualties', size=14)
ax2.set_xlabel('2014', size=14)
# fit
def func(x, c, a, z):
return a+c*x**z
def get_r2 (fun, X, Y, *args):
sstot = sum([(Y[i]-np.mean(Y))**2 for i in xrange(len(Y))])
sserr = sum([(Y[i] - fun(X[i], *args))**2 for i in xrange(len(Y))])
return 1 - sserr/sstot
def uncertainty_band(x, y, df=1, conf=0.95):
"""
Calculates the confidence or prediction band of the polynomial regression
model at the desired confidence level.
The 2 sigma confidence interval is 95% sure to contain the best-fit
regression line.
The 2 sigma prediction interval contains 95% of the data points.
:params .95 conf: desired confidence level, by default 0.95 (2 sigma)
:params x: data array or list
:params y: data array or list
:params 1 df: polynomial degree for the fit
:returns: an array with the confidence values to add/substract, another
with prediction values, an array with the fitted x values, an array with
the fitted y values and the scipy.poly1d object, the R-square value of
the fit
"""
if not isinstance(x, np.ndarray):
x = np.array(x)
if not isinstance(y, np.ndarray):
y = np.array(y)
# fit a curve to the data using a least squares 1st order polynomial fit
z = np.polyfit(x, y, df)
p = np.poly1d(z)
# predict y values of origional data using the fit
p_y = p(x)
# create series of new test x values to predict for
p_x = np.linspace(min(x), max(x), 100)
# number of samples in origional fit
n = x.size
# alpha 1 minus the wanted probability
alpha = 1. - conf
# t distribution with n-2 degrees of freedom
t = t_distr.ppf(1. - alpha / 2., n - df - 1)
# mean of x
mean_x = np.mean(x)
# Error sum of squares
sse = sum((y - p_y)**2)
# Error mean square (estimate of the variance)
mse = sse / (n - df - 1)
# Square individual deviation
sdi = (p_x - mean_x)**2
# standard deviation
sd = sum((x - mean_x)**2)
# relative individual deviation
sdi_sd = sdi / sd
confs = t * np.sqrt(mse * ( 1.0 / n + sdi_sd))
preds = t * np.sqrt(mse * (1.0 + 1.0 / n + sdi_sd))
# calculate R-square
sstot = sum((y - np.mean(y))**2)
sserr = sum((y - p(x))**2)
r2 = 1 - sserr/sstot
# now predict y based on test x-values
p_y = p(p_x)
return confs, preds, p_x, p_y, p, r2
confs, preds, p_x, p_y, p, r2 = uncertainty_band(np.array([d.toordinal() - 735314 for d in dates]),
np.array([sum([countries[c][i][0] for c in countries])
for i in xrange(len(dates))]), df=6)
#plt.plot([mdates.num2date(d + 735314) for d in p_x], p_y, color='darkorange', lw=1, ls='--', label='Regression line')
# plot confidence limits
plt.fill_between([mdates.num2date(d + 735314) for d in p_x], p_y + confs, p_y - confs, color='darkorange', alpha=0.3)
plt.fill_between([mdates.num2date(d + 735314) for d in p_x], p_y - preds, p_y + preds, color='darkorange', alpha=0.2)
confs, preds, p_x, p_y, p, r2 = uncertainty_band(np.array([d.toordinal() - 735314 for d in dates]),
np.array([sum([countries[c][i][1] for c in countries])
for i in xrange(len(dates))]), df=6)
#plt.plot([mdates.num2date(d + 735314) for d in p_x], p_y, color='darkorange', lw=1, ls='--', label='Regression line')
# plot confidence limits
plt.fill_between([mdates.num2date(d + 735314) for d in p_x], p_y + confs, p_y - confs, color='darkred', alpha=0.3)
plt.fill_between([mdates.num2date(d + 735314) for d in p_x], p_y - preds, p_y + preds, color='darkred', alpha=0.2)
p1 = Rectangle((0, 0), 1, 1, fc="darkorange", alpha=.3)
p2 = Rectangle((0, 0), 1, 1, fc="darkorange", alpha=.2)
p3 = Rectangle((0, 0), 1, 1, fc="darkred", alpha=.3)
p4 = Rectangle((0, 0), 1, 1, fc="darkred", alpha=.2)
plt.legend([scat[0]] + line1 + [p1, p2] + line2 + [p3, p4], ['Total cases each month',
'Cases',
'95% confidence band', '95% prediction band',
'Deaths',
'95% confidence band', '95% prediction band'],
frameon=False, loc='upper left', bbox_to_anchor=[1,1])
fig.subplots_adjust(right=0.8)
plt.savefig('Ebola_map_25082014.pdf', format='pdf')
plt.savefig('Ebola_map_25082014.png', format='png')
plt.show()
In [ ]: