#TerraClimate
Bivariate maps showing the relationships between Temperature and Precipitation.

Made with Plot, based on a great tutorial by Fil: observablehq.com/@jo...

Data from TerraClimate (1958-present).

#cartography #maps #mapping #climate #dataviz #SciArt
January 6, 2025 at 7:00 AM
Evapaotranspiration. Data comes from the TerraClimate project.
September 27, 2025 at 8:59 AM
'Put it into Blender and see what happens' #4

Bivariate maps showing the relationships between Temperature and Precipitation.

(Monthly data since 1958 by TerraClimate)

observablehq.com/@jo...

#maps #blender #climate #sciart #cartography #gis
January 13, 2025 at 7:00 AM
My own tutorial for this (2/2) github.com/Heed725/Terr...
GitHub - Heed725/Terraclimate-ClimateR-Tutorial
Contribute to Heed725/Terraclimate-ClimateR-Tutorial development by creating an account on GitHub.
github.com
May 7, 2025 at 6:39 PM
My talk would be divided in three plugins ;- Opentopography point elevation

Terraclimate Downloader Where you are able to download any Raster climatic variables

Bivariate Plugin where we combine two variables to make a maps using Bivariate colors either in Raster and Vector
September 25, 2026 at 5:30 AM
Day five of the #30DayMapChallenge - Earth. Soil moisture. Data comes from the TerraClimate project. I love this colourmap.
November 7, 2025 at 11:31 PM
Soil moisture. Data comes from the TerraClimate project.
Is my choice of colourmap appropriate? No.
Do I care? No.
Do I just like making pretty pictures? Yes
October 1, 2025 at 9:13 PM
Day-3: Hexagons #30DayMapChallenge

🌧️🇹🇳 #Precipitation and #PDSI hexagon map of #Tunisia, sourced from #TerraClimate data!

😎Mapping drought stress and water availability in a whole new way 🌍

#ClimateData #DataViz #R #Mapping #NorthAfrica #water
November 4, 2024 at 4:15 PM
Oh yeah ... we used a lot of #RemoteSensing #Landsat data for this one! Processed in #GoogleEarthEngine. And #Climate data (TerraClimate)
December 5, 2024 at 3:07 PM
Some popular data sources are CHELSA chelsa-climate.org, TerraClimate www.climatologylab.org/terraclimate..., ERA5 confluence.ecmwf.int/display/CKB/....

There are several R packages to access all them, eg. bluegreen-labs.github.io/ecmwfr/, mikejohnson51.github.io/climateR/, and many more
Chelsa Climate
Climatologies at high resolution for the earth’s land surface areas
chelsa-climate.org
January 2, 2025 at 10:41 AM
I love this! In fact, I loved it so much that I immediately replicated it in a notebook: observablehq.com/@joewdavies/... Thank you!
Bivariate choropleth map with Plot
Based on this fantastic tutorial by Fil: https://observablehq.observablehq.cloud/pangea/plot/bivariate-map Data Fetch data From the University of Idaho’s TerraClimate repository Dependencies
observablehq.com
January 3, 2025 at 7:15 PM
Exploring the ties between precipitation and soil moisture with #TerraClimate data in #Spain! 🇪🇸🌧️

Y bueno, aquí hasta las nubes vienen preparadas con cantimplora… por si acaso 😂

@milos-makes-maps.bsky.social
@drxeo.bsky.social

¿Qué piensas?

#Climatechange #ClimateActionNow #R #Dataviz #Europe
October 30, 2024 at 10:28 AM
#QGIS First open day talk starts in 20 minutes!

Downloading Climate R - Terraclimate datasets within QGIS

Speaker: Hemed Lungo

Join details: github.com/qgis/QGIS/wi...

You can watch later on our YouTube channel if you missed it!
QOD February 2025
QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS) - qgis/QGIS
github.com
February 28, 2025 at 10:41 AM
There are many gridded temperature products with minimum T. Here are couple options: TerraClimate www.climatologylab.org/terraclimate..., PRISM prism.oregonstate.edu/historical/, WorldClim www.worldclim.org/data/bioclim... are just a few...
PRISM Climate Group at Oregon State University
prism.oregonstate.edu
February 3, 2025 at 8:28 PM
2/6
We call the product 'TopoTerra', because we downscaled TerraClimate data using the spatial footprint of another dataset called TopoFire.
February 5, 2025 at 1:32 AM
By July, three-quarters of the Korean peninsula shares one kind of weather: hot and soaking wet at once. Every place coloured by how warm and how wet it is together, 30 years of records. Data: TerraClimate. #korea #climate #dataviz #maps
August 24, 2026 at 12:00 PM
5/6
As far as I know, most other downscaled climate datasets use elevational lapse rates and therefore don’t account for fine-scale, topographically driven differences in solar insolation. TopoTerra can be considered a downscaled version of TerraClimate.
February 5, 2025 at 1:32 AM
Nuevo en modelado ecológico: ecotrends, un paquete R que analiza tendencias de idoneidad del hábitat mediante series temporales y datos de presencia como los de @gbif.org. Una herramienta clave para evaluar vulnerabilidad y apoyar la conservación:
▶️ doi.org/10.1016/j.ec... #EcologicalModelling
January 8, 2026 at 1:12 PM
Si el cambio climático actual incrementa la estacionalidad y la aridez, podríamos esperar que algunas especies aumenten su comportamiento migratorio, siempre que los costos energéticos de migrar sean viables y existan rutas de migración adecuadas (6/7).
January 14, 2025 at 6:45 AM
TerraClimate: Error generating chart: Data column(s) for axis #0 cannot be of type string
I am using "TerraClimate: Monthly Climate and Climatic Water Balance for Global Terrestrial Surfaces, University of Idaho" dataset... When I try my code, I have this error message Error generating chart: Data column(s) for axis #0 cannot be of type string. I'm interesting to vapor pressure deficit. Here is my code: var dataset = ee.ImageCollection('IDAHO_EPSCOR/TERRACLIMATE') .filter(ee.Filter.date('1958-01-01', '2020-12-01')) .filterBounds(geometry); print (dataset); var Vapor_pressure_deficit = dataset.select('vpd'); print (Vapor_pressure_deficit); var VPD = Vapor_pressure_deficit.map(function(img){ var date = img.get('system:time_start'); return img.multiply(0.01).set('system_time_start', date); }); var createTS = function(img){ var date = img.get('system_time_start'); var value = img.reduceRegion(ee.Reducer.mean(), geometry).get('vpd'); var ft = ee.Feature(null, {'system:time_start': date, 'date': ee.Date(date).format('Y/M/d'), 'value': value}); return ft; }; var vpd_final = VPD.map(createTS); var graph = ui.Chart.feature.byFeature(vpd_final, 'system:time_start', 'value'); print(graph.setChartType("ColumnChart") .setOptions({vAxis: {title: 'VPD [kPa]'}, hAxis: {title: 'Date'}})); Export.table.toDrive({collection: vpd_final, selectors: 'date, value'});
gis.stackexchange.com
September 5, 2026 at 10:04 PM
Mapping over a reduceRegions command in Earth Engine
I have a feature collection of about 80,000 tiles, and I am trying to calculate the annual maximum drought severity index score for each tile using TerraClimate data. TerraClimate is an image collection, so I started by transforming it into a stack of images. var drought_M = ee.ImageCollection("IDAHO_EPSCOR/TERRACLIMATE").select("pdsi") .filter(ee.Filter.date('2000-01-01', '2012-12-31')); //This function creates a stack of images from the image collection function newCollectionToImage(collection){ var stack = ee.Image(collection.iterate(function(img, prev) { return ee.Image(prev).addBands(img); }, ee.Image(1))); stack = stack.select(ee.List.sequence(1, stack.bandNames().size().subtract(1))); return stack; } //This function renames the image collection bands var drought_M_rename = drought_M.map(function(img){ var y = ee.String(ee.Date(img.get('system:time_start')).get("year")); return img.set("year",y).rename(y); }); //Apply the function to create a stack of images var droughtImageStack = newCollectionToImage(drought_M_rename); I tried to use reduceRegions() to get the monthly score for each tile. var droughtImageStack = tchImg.reduceRegions(tiles, ee.Reducer.mean()); This works in the terminal, but when I try to export the dataframe as a csv, GEE returns the error: Error: User memory limit exceeded. I've been told before that image reductions become a lot more efficient when you map over the feature collection. I tried to use the basic intuition of how to map over a feature collection for reduceRegion() and attempted the following: var droughtTiles = tiles.map(function(feature) { return feature.set(droughtImageStack.reduceRegions({ reducer: ee.Reducer.mean(), geometry: feature.geometry(), scale: 10 })); }); But this map function returns an error: Required argument (collection) missing to function: Image.reduceRegions(image, collection, reducer, scale, crs, crsTransform, tileScale)... How can I adjust my mapping function to produce monthly tile means that export?
gis.stackexchange.com
July 30, 2026 at 11:10 PM
Adjusting/extending the bounding box in the request to TerraClimate should fix it i'd imagine
January 6, 2025 at 2:26 PM
Google Earth Engine - only extract values for each point based on a corresponding date
I have a list of occurrence points that I am collecting data for. Each point was collected on a specific date, with little overlap among when each organism was detected (data file with dates and collection points here). I am trying to extract values from the TerraClimate ImageCollections for each occurrence point, but only for the corresponding date. So far, I have managed to subset the ImageCollection down to all of the dates the data were collected (so for each point, there is a value for for when it was collected along values for the dates all of the other occurrence points were collected. Is there a way to update my code so that I am on extracting the values that aligns with the collection month-year for each occurrence point? Code is here and below: //functions function bufferPoints(radius, bounds) { return function(pt) { pt = ee.Feature(pt); return bounds ? pt.buffer(radius).bounds() : pt.buffer(radius); }; } //read in points var pts = ee.FeatureCollection('users/user/lu_long_pres_ES'); var pts_buffer = pts.map(bufferPoints(500, true)); //square pixel //read in climate data var startDate = '1986-01-01' var endDate = '2017-08-01' ///read in date list and subset image collection to dates var dates = ee.FeatureCollection('users/user/dates') var date2list = ee.List(dates.reduceColumns({ reducer: ee.Reducer.toList().repeat(1), selectors: ['date'] }) .get('list')) .flatten(); var date_list = date2list.map(function(date){ return ee.Date.parse({format:'"y-M-d"', date: ee.String(date)}) .millis(); }); var climate = ee.ImageCollection("IDAHO_EPSCOR/TERRACLIMATE") .filterDate(startDate, endDate) var climate = climate.map(function(image){ return image.set('simpleTime', ee.Date(image.date().format('YYYY-MM-dd')).millis()); }); var climate_sub = climate.filter(ee.Filter.inList("simpleTime", date_list)); //get image for each month and year within the date subset var climate_monthly = ee.ImageCollection.fromImages(ee.List.sequence(1, 2).map(function(y){ var total_precip = climate_sub.map(function (image) { return image.select(['pr']) }).toBands(); var mintemp = climate_sub.map(function (image) { return image.select(['tmmn']) }).toBands(); var maxtemp = climate_sub.map(function (image) { return image.select(['tmmx']) }).toBands(); var wind_speed = climate_sub.map(function (image) { return image.select(['vs']) }).toBands(); return ee.Image.cat(total_precip, mintemp, maxtemp, wind_speed); })).toBands(); //"reduce" climate to the 1000m buffer zone var climate_point_monthly = climate_monthly.reduceRegions({ collection: pts_buffer, reducer: ee.Reducer.median() })
gis.stackexchange.com
June 24, 2026 at 12:05 AM
TerraClimate: Error generating chart: Data column(s) for axis #0 cannot be of type string
I am using "TerraClimate: Monthly Climate and Climatic Water Balance for Global Terrestrial Surfaces, University of Idaho" dataset... When I try my code, I have this error message Error generating chart: Data column(s) for axis #0 cannot be of type string. I'm interesting to vapor pressure deficit. Here is my code: var dataset = ee.ImageCollection('IDAHO_EPSCOR/TERRACLIMATE') .filter(ee.Filter.date('1958-01-01', '2020-12-01')) .filterBounds(geometry); print (dataset); var Vapor_pressure_deficit = dataset.select('vpd'); print (Vapor_pressure_deficit); var VPD = Vapor_pressure_deficit.map(function(img){ var date = img.get('system:time_start'); return img.multiply(0.01).set('system_time_start', date); }); var createTS = function(img){ var date = img.get('system_time_start'); var value = img.reduceRegion(ee.Reducer.mean(), geometry).get('vpd'); var ft = ee.Feature(null, {'system:time_start': date, 'date': ee.Date(date).format('Y/M/d'), 'value': value}); return ft; }; var vpd_final = VPD.map(createTS); var graph = ui.Chart.feature.byFeature(vpd_final, 'system:time_start', 'value'); print(graph.setChartType("ColumnChart") .setOptions({vAxis: {title: 'VPD [kPa]'}, hAxis: {title: 'Date'}})); Export.table.toDrive({collection: vpd_final, selectors: 'date, value'});
gis.stackexchange.com
May 4, 2026 at 7:11 AM