's Avatar

@hughagraham.bsky.social

23 Followers  |  108 Following  |  3 Posts  |  Joined: 17.08.2025  |  1.9815

Latest posts by hughagraham.bsky.social on Bluesky

PhD Studentship Opportunity: "Quantifying Forest Plantation Damage After Cyclones Using Earth Observation"

This funded project at the University of Exeter tackles a real and urgent global challenge: rapidly assessing storm damage in forest plantations.

Full description on tinyurl.com/4tdw3yw6.

17.11.2025 12:00 β€” πŸ‘ 0    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image

One thing I appreciate about {targets} is the robustness of the pipeline: if I need to stop a long, compute-intensive process to run something else (or, in this case, I resize a pane and make the IDE crashπŸ€·β€β™‚οΈ), I don't need to worry about corrupted state: just restart R and tar_make() away!

#RStats

17.11.2025 14:11 β€” πŸ‘ 14    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image

I’m thrilled to share that my new book (Spatial Data Management with DuckDB) is now published! πŸŽ‰

At 430 pages, this book provides a practical, hands-on guide to scalable geospatial analytics and visualization using DuckDB. All code examples are open-source and freely available on GitHub.

15.11.2025 18:44 β€” πŸ‘ 54    πŸ” 12    πŸ’¬ 3    πŸ“Œ 1

πŸ”₯ {torchgnn} πŸ•ΈοΈ is a WIP implementation of Graph Neural Networks in R.

- GCN
- GCN (generalized)
- GraphSAGE
- Aggregators

Development based on personal needs, ofc :)

#rstats
github.com/JosiahParry/...

13.11.2025 20:14 β€” πŸ‘ 18    πŸ” 10    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

The `enable_shiny_hover()` function in mapgl for #rstats lets you use your mouse's position as a Shiny input.

Be judicious with how you use it... but it unlocks so many possibilities for mapping your data.

Example: Census tracts that restyle based on your cursor position

12.11.2025 20:53 β€” πŸ‘ 13    πŸ” 2    πŸ’¬ 1    πŸ“Œ 1
3D mountain rendered from above

3D mountain rendered from above

A look from the side of a render of a 3D mountain with dramatic lighting

A look from the side of a render of a 3D mountain with dramatic lighting

Day 6 of the #30DayMapChallenge (3D), a render of Mount Rainier with a realistic atmospheric skydome generated w/ a lat/long/datetime, rendered entirely in #RStats with #rayshader and #rayrender! The atmosphere is annoyingly realistic: I now have to dial in the exposure depending on the time of day!

08.11.2025 01:14 β€” πŸ‘ 78    πŸ” 10    πŸ’¬ 7    πŸ“Œ 0

with{targets}, might seem that *your workflow* is complex and bespoke and not fit, you are probably wrong - it makes the expertise that is truly *yours* shine and grow. Encapsulate an entire production process and makes that easy to do

it's more *you*, actually - keep at it! #rstats

08.11.2025 05:18 β€” πŸ‘ 13    πŸ” 2    πŸ’¬ 1    πŸ“Œ 0

Oh thanks, yeah tar_older is new to me, that's handy!

07.11.2025 11:48 β€” πŸ‘ 1    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Post image

Fantastic to welcome @trishg.bsky.social to the group today πŸ₯³

Trisha is on an 1851 fellowship and will be working on resilience loss in savannahs with myself, @tommaso-jucker.bsky.social and @mdekauwe.bsky.social

@bristolbiosci.bsky.social

scholar.google.com/citations?us...

03.11.2025 13:49 β€” πŸ‘ 9    πŸ” 2    πŸ’¬ 0    πŸ“Œ 1

#rstats how do I make a target time-out, I want one in particular to only run every month or two

there's a backlog of file urls, normal use is target_this_year, but every now and then I want the prior target_all_years to invalidate and do a full scan

03.11.2025 04:24 β€” πŸ‘ 0    πŸ” 2    πŸ’¬ 2    πŸ“Œ 0
Target with a custom condition to force execution. β€” tar_force Create a target that always runs if a user-defined condition rule is met.

Maybe create one target which logs the time the initial action was run and the use tar_force docs.ropensci.org/tarchetypes/... to conditionally check that time and force execution if the time is right?

03.11.2025 11:40 β€” πŸ‘ 0    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

I can see {targets} evolving past tar_assign to an actual new language syntax that's just R (its successor)

I bet some are already thinking about this #rstats it's been an inexorable series of improvs and the foundation's so solid

This is the edge, actual reproducibility and scaling

03.11.2025 06:37 β€” πŸ‘ 12    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0
Preview
5Β  Raster-vector interactions – Geocomputation with Python An introductory resource for working with geographic data in Python

Working with raster + vector together in Python? πŸ—ΊοΈπŸŒπŸ

Chapter 5 of geocompx talks about:

- Cropping & masking rasters with vectors
- Extracting raster values via vector data
- Raster ↔️ vector conversion (polygonize & rasterize)

πŸ‘‰ py.geocompx.org/05-raster-ve...

#GeoPython #Python #GISchat

02.11.2025 14:01 β€” πŸ‘ 10    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0
An image of three mountains (Mt Shasta, Mt Adams, Mt Rainier), showing each mountain in an elevation view (i.e. seen from the front). Each mountain is illustrated by means of sketch lines.

An image of three mountains (Mt Shasta, Mt Adams, Mt Rainier), showing each mountain in an elevation view (i.e. seen from the front). Each mountain is illustrated by means of sketch lines.

An image of Aoraki, seen from the ground level. It is illustrated with sketch lines in black and white.

An image of Aoraki, seen from the ground level. It is illustrated with sketch lines in black and white.

It's been a long journey (>1 year since I began), but there's finallt a public release of the oblique hachures method. With many thanks to @southarrowmaps.co.nz, who significantly refined the methodology from what I began with.

Writeup (w/ a link to the script): docs.google.com/document/d/1...

01.11.2025 02:24 β€” πŸ‘ 43    πŸ” 10    πŸ’¬ 3    πŸ“Œ 2
Copernicus Sentinel-2 close up view of the eye on the hurricane on 28 October 2025

Copernicus Sentinel-2 close up view of the eye on the hurricane on 28 October 2025

Copernicus Sentinel-3 image of the hurricane from 27 October 2025

Copernicus Sentinel-3 image of the hurricane from 27 October 2025

Viewed by #CopernicusEU Sentinel satellites, hurricane #Melissa seen over the Caribbean, currently the strongest tropical cyclone of the year worldwide.

Our thoughts are with everyone affected. Please follow guidance from local authorities and stay safe.

@noaa.gov @euspa.bsky.social @eumetsat.int

30.10.2025 09:17 β€” πŸ‘ 171    πŸ” 35    πŸ’¬ 1    πŸ“Œ 2

is element84 queries not working for some reason atm

30.10.2025 09:30 β€” πŸ‘ 0    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
A visualisation of the bathymetric contours of a spot in the Andaman Sea

A visualisation of the bathymetric contours of a spot in the Andaman Sea

Somewhere in the Andaman Sea.

#rayshader adventures, an #rstats tale

26.10.2025 02:00 β€” πŸ‘ 19    πŸ” 4    πŸ’¬ 0    πŸ“Œ 1

I'm guessing that R6 classes are implemented with environment shenanigans which is why base R plots can't be updated with class methods. Regardless, what's the best way to modify an existing plot within a method call? Is there a conventional pattern for passing the global environment or the like?

26.10.2025 02:45 β€” πŸ‘ 2    πŸ” 2    πŸ’¬ 1    πŸ“Œ 0
Post image

why tf does it suddenly work ...

21.10.2025 11:44 β€” πŸ‘ 2    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0

Does targets::tar_cancel()/tarchetypes::tar_skip() not work with dynamic branching? I get "invalid 'description' argument" when downstream arguments depend on the cancelled target. My expectation would be that the cancellation would propagate to any downstream targets.

#RStats

16.10.2025 17:44 β€” πŸ‘ 0    πŸ” 3    πŸ’¬ 1    πŸ“Œ 0
Preview
Minimalist Async Evaluation Framework for R Designed for simplicity, a mirai evaluates an R expression asynchronously in a parallel process, locally or distributed over the network. Modern networking and concurrency, built on nanonext and NNG, ...

I recently added a Deepwiki badge to mirai.r-lib.org.

Not because I think the current documentation is lacking πŸ˜…, but it takes you to an `Ask DeepWiki` prompt with the full mirai source code as context so you can ask questions (and get answers) in *any* language.

Any feedback welcome! #rstats

13.10.2025 14:46 β€” πŸ‘ 12    πŸ” 4    πŸ’¬ 0    πŸ“Œ 0

how's your day going

#rstats

paste0(sample(c(letters, LETTERS, 0:9,
strsplit("!@#$%^&*()_+=-~", "")[[1]]), 56),
collapse = "")

09.10.2025 23:32 β€” πŸ‘ 4    πŸ” 2    πŸ’¬ 0    πŸ“Œ 0

hey spatial folks: if anyone has a great "parquet versus zarr" write-up, let me know. I'm never going to write a serializer but I'm really interested in the performance impacts of format for cloud downloads πŸ‘€

#geosky

04.10.2025 13:32 β€” πŸ‘ 8    πŸ” 4    πŸ’¬ 3    πŸ“Œ 1

I’m in the process of wiring a blog post (and @nacis.bsky.social talk) on using Python to drive GDAL. Has anyone tried this and been confused? If so, what tripped you up? Or if you’re an expert and have opinions, would you be willing to provide feedback? πŸ™

#cartography #python #gdal

07.10.2025 00:40 β€” πŸ‘ 14    πŸ” 4    πŸ’¬ 5    πŸ“Œ 0

8 years old blog post, sad musing API being hidden under weaker downstream packages:

www.hypertidy.org/posts/2017-0...

so much has changed! I could write the same story but for R and Python now, good news though: {gdalraster}, duckdb, pyogrio, odc, mdim, and huge improvs in GDAL itself

08.10.2025 19:36 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

Introducing {pmtiles}: an #rstats package to create, view, and interact with PMTiles.

PMTiles is one of the most exciting geospatial innovations in recent years. Map tiles are stored & served from a single file, making massive geospatial data visualization widely accessible.

02.10.2025 14:26 β€” πŸ‘ 29    πŸ” 8    πŸ’¬ 1    πŸ“Œ 1
Preview
question_parallel_pyfutures.md GitHub Gist: instantly share code, notes, and snippets.

kicking python concurrent.futures butt with {mirai} #rstats

gist.github.com/mdsumner/898...

(there's no reason ThreadPoolExecutor should not be as fast, I'm genuinely looking for an answer to what I'm doing wrong there)

/1

27.09.2025 06:35 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Post image Post image

🌍Exploring Sentinel-2 with the Copernicus Data Space Ecosystem (CDSE)?

Hugh Graham’s guide with vrtility in #rstats. Includes authentication & query of imagery and building cloud-free composites.

permian-global-research.github.io/vrtility/art...

#RSpatial #RemoteSensing #EarthObservation #GIS

24.09.2025 13:03 β€” πŸ‘ 11    πŸ” 5    πŸ’¬ 0    πŸ“Œ 0

In all honesty, it's just the same as sourcing files like others have suggested. I just made extra splits because my workflow required lots of branching. I don't usually need to split things into modules and units. Organising targets objects across scripts is a good way to organise things for sureπŸ™‚

15.09.2025 01:28 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
nanonext 1.7.0 nanonext is a communications and concurrency toolbox that facilitates fast, powerful and reliable data exchange in polyglot data science workflows.

tidyverse blog: Breaking down language barriers in data science

nanonext is a messaging and concurrency toolkit, connecting R to polyglot data science pipelines involving modules written in Python, Rust, Go and C++ etc.

www.tidyverse.org/blog/2025/09...

#RStats #tidyverse

02.09.2025 18:37 β€” πŸ‘ 32    πŸ” 7    πŸ’¬ 1    πŸ“Œ 0

@hughagraham is following 20 prominent accounts