Weather stations by WorldClim

WorldClim: Global weather stations Shapefile by WorldClim


The points in this shapefile represent locations of the weather stationsassembled for use in devloping the WorldClim dataset.


Robert J. Hijmans, Susan Cameron, and Juan Parra, at the Museum of Vertebrate Zoology, University of California, Berkeley, in collaboration with Peter Jones and Andrew Jarvis (CIAT), and with Karen Richardson (Rainforest CRC).


Weather station data were assembled from a large number of sources:

(1) The Global Historical Climate Network Dataset (GHCN) version 2. ( data/ghcn/v2;Peterson and Vose, 1997). GHCN reports data by year and month, and we calculated monthly means for the 1950-2000 period. GHCN has data for precipitation (20 590 stations), mean temperature (7280 stations), and minimum and maximum temperature (4966 stations). For precipitation and mean temperature, GHCN has global coverage, but there are large gaps in the geographic distribution of stations with minimum and maximum temperature data. For some stations, -adjusted- data that had been through homogeneity control procedures were used (Peterson and Easterling, 1994; Easterling and Peterson, 1995). We included the adjusted data where available and used unadjusted data for the remainder of the stations.

(2) The WMO climatological normals (CLINO) for 1961-1990 (WMO, 1996). This database includes monthly mean (3084 stations), minimum and maximum (both 2504 stations) temperature and precipitation (4261 stations). WMO did extensive quality control on these data (WMO, 1996).

(3) The FAOCLIM 2.0 global climate database (FAO, 2001). This database contains monthly data. It has precipitation data for 27 372 stations, mean temperature data for 20 825 stations, and minimum and maximum temperature data for 11 543 stations. This database includes long-term averages (1960-1990) as well as time series data for temperature and precipitation.

(4) A database assembled by Peter G. Jones and collaborators at the International Center for Tropical Agriculture (CIAT) in Colombia. It includes mean monthly data for precipitation (18 895 stations), mean temperature (13 842 stations), and minimum and maximum temperature (5321 stations). This database has data for the (sub)tropics only and is particularly data rich for Latin America.

(5) Additional regional databases for Latin America and the Caribbean (R-Hydronet;, the Altiplano in Peru and Bolivia (INTECSA, 1993), the -Nordic Countries- in Europe (Nordklim, coord/nordklim/), Australia (BOM, 2003), New Zealand (, and Madagascar (database accompanying Oldeman, 1988).

In [122]:
import geopandas as gpd
gdf = gpd.read_file("./raw/WorldClim_ Global weather stations/data/stations1.shp")
0 1 None AFGHANISTAN 32.833 67.783 2000 NA NA NA 18 POINT (67.783 32.833)
1 2 None AFGHANISTAN 34.583 68.983 2114 NA NA NA 12 POINT (68.983 34.583)
2 3 None AFGHANISTAN 35.300 69.066 3172 NA NA NA 8 POINT (69.066 35.3)
3 4 None ALBANIA 40.083 20.150 194 NA NA NA 44 POINT (20.15 40.083)
4 5 None ALBANIA 40.716 19.950 226 NA NA NA 45 POINT (19.95 40.716)
In [125]:
(55879, 11)
In [7]:
gdf.plot(color='red', figsize=(15,20));
In [11]:
ax = gdf.plot(cmap="PuBu", marker='*', markersize=0.3, figsize=(15,20))
ax.set_title("Geolocation of active surface weather stations.")
ax.annotate("Source: World Clim", xy=(10,10), xycoords='axes points', fontsize=12, color="#cccccc")
Text(10, 10, 'Source: World Clim')

Plain Kernel Density Estimate (KDE) - no geo info

From the documentation:

"Fit and plot a univariate or bivariate kernel density estimate."

In [25]:
import seaborn as sns

fig, ax = plt.subplots(figsize=(15,10))  
sns.kdeplot(gdf['LONG'], gdf['LAT'], shade=True, cmap='viridis', ax=ax);
ax.set_title("Weather stations kernel density estimate (KDE)")
Text(0.5, 1.0, 'Weather stations kernel density estimate (KDE)')

Spatial KDE

Spatial kernel density estimate plot.

In [56]:
import as gcrs
import geoplot as geoplot

# Coordinate reference system : WGS84
crs = {'init': 'epsg:4326'}
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres')).to_crs(crs)

ax = gplt.kdeplot(gdf, shade=True, shade_lowest=False, clip=world.geometry, figsize=(15,10))
ax.set_title("Weather stations spatial kernel density estimate (geo KDE)")
Text(0.5, 1.0, 'Weather stations spatial kernel density estimate (geo KDE)')
In [66]:
# Setup figure and axis
f, ax = plt.subplots(1, figsize=(15, 10))
# Add hexagon layer that displays count of points in each polygon
hb = ax.hexbin(gdf.LONG, gdf.LAT, gridsize=50, alpha=0.8, cmap='viridis')
# Add a colorbar (optional)
<matplotlib.colorbar.Colorbar at 0x125ad35c0>