Note
Go to the end to download the full example code or to run this example in your browser via Binder.
Animating PUNCH data#
How to animate PUNCH data using built-in plotting tools
First we’ll load a set of libraries. This is minimal, but will give us the tools to query a sample of data to download and animate.
from datetime import datetime
from sunpy.net import Fido, attrs
from punchbowl.data.visualize import animate_punch
Next we’ll query a sample of data to animate. Note that you can modify the time range, the product code, and the data version code.
start_time, end_time = datetime(2025, 10, 31, 2, 0, 0), datetime(2025, 10, 31, 3, 0, 0)
product_code = "L3_CIM"
version_code = "v0i"
result = Fido.search(
attrs.Time(start_time, end_time),
attrs.Source("PUNCH-MOSAIC"),
attrs.Instrument("Unpolarized")
)
result = result[0][[i for i, r in enumerate(result[0]['fileid']) if product_code in r and version_code in r]]
result
The resulting files can then be downloaded.
files = Fido.fetch(result)
Files Downloaded: 0%| | 0/8 [00:00<?, ?file/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 0%| | 0.00/16.3M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 0%| | 0.00/16.4M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 0%| | 0.00/16.4M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 0%| | 0.00/16.4M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 0%| | 0.00/16.4M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 0%| | 1.02k/16.4M [00:00<27:41, 9.85kB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 0%| | 1.02k/16.3M [00:00<28:37, 9.51kB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 0%| | 16.7k/16.4M [00:00<01:40, 163kB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 0%| | 1.02k/16.4M [00:00<27:12, 10.0kB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 0%| | 8.85k/16.4M [00:00<03:25, 79.5kB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 8%|▊ | 1.27M/16.4M [00:00<00:02, 7.33MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 10%|▉ | 1.62M/16.4M [00:00<00:01, 9.42MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 9%|▊ | 1.39M/16.4M [00:00<00:01, 7.96MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 8%|▊ | 1.34M/16.3M [00:00<00:02, 7.17MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 10%|▉ | 1.56M/16.4M [00:00<00:01, 8.35MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 20%|██ | 3.30M/16.4M [00:00<00:01, 12.9MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 20%|██ | 3.33M/16.4M [00:00<00:01, 12.6MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 23%|██▎ | 3.73M/16.4M [00:00<00:00, 13.9MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 20%|██ | 3.27M/16.3M [00:00<00:01, 12.2MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 22%|██▏ | 3.59M/16.4M [00:00<00:00, 13.3MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 32%|███▏ | 5.29M/16.4M [00:00<00:00, 15.3MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 35%|███▍ | 5.66M/16.4M [00:00<00:00, 15.9MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 35%|███▌ | 5.76M/16.4M [00:00<00:00, 16.5MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 35%|███▌ | 5.78M/16.4M [00:00<00:00, 16.3MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 34%|███▍ | 5.61M/16.3M [00:00<00:00, 15.5MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 45%|████▌ | 7.37M/16.4M [00:00<00:00, 17.1MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 48%|████▊ | 7.86M/16.4M [00:00<00:00, 18.0MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 49%|████▉ | 8.00M/16.4M [00:00<00:00, 18.3MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 48%|████▊ | 7.78M/16.4M [00:00<00:00, 17.3MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 48%|████▊ | 7.83M/16.3M [00:00<00:00, 17.4MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 60%|██████ | 9.88M/16.4M [00:00<00:00, 18.6MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 63%|██████▎ | 10.4M/16.4M [00:00<00:00, 19.0MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 65%|██████▍ | 10.6M/16.4M [00:00<00:00, 19.4MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 62%|██████▏ | 10.2M/16.4M [00:00<00:00, 18.2MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 63%|██████▎ | 10.4M/16.3M [00:00<00:00, 18.6MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 77%|███████▋ | 12.6M/16.4M [00:00<00:00, 21.3MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 79%|███████▊ | 12.9M/16.4M [00:00<00:00, 21.0MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 79%|███████▉ | 13.0M/16.4M [00:00<00:00, 20.9MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 78%|███████▊ | 12.8M/16.4M [00:00<00:00, 20.5MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 80%|████████ | 13.1M/16.3M [00:00<00:00, 21.3MB/s]
PUNCH_L3_CIM_20251031020829_v0i.fits: 90%|█████████ | 14.7M/16.4M [00:00<00:00, 21.1MB/s]
PUNCH_L3_CIM_20251031022429_v0i.fits: 92%|█████████▏| 15.0M/16.4M [00:00<00:00, 20.7MB/s]
PUNCH_L3_CIM_20251031023229_v0i.fits: 92%|█████████▏| 15.1M/16.4M [00:00<00:00, 20.7MB/s]
PUNCH_L3_CIM_20251031021629_v0i.fits: 92%|█████████▏| 15.0M/16.4M [00:00<00:00, 20.9MB/s]
PUNCH_L3_CIM_20251031020029_v0i.fits: 95%|█████████▌| 15.5M/16.3M [00:00<00:00, 22.1MB/s]
Files Downloaded: 12%|█▎ | 1/8 [00:00<00:06, 1.04file/s]
PUNCH_L3_CIM_20251031024829_v0i.fits: 0%| | 0.00/11.2M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031025629_v0i.fits: 0%| | 0.00/16.3M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 0%| | 0.00/16.3M [00:00<?, ?B/s]
PUNCH_L3_CIM_20251031024829_v0i.fits: 4%|▍ | 472k/11.2M [00:00<00:02, 4.64MB/s]
PUNCH_L3_CIM_20251031025629_v0i.fits: 3%|▎ | 448k/16.3M [00:00<00:03, 4.43MB/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 2%|▏ | 352k/16.3M [00:00<00:04, 3.52MB/s]
PUNCH_L3_CIM_20251031024829_v0i.fits: 36%|███▌ | 4.02M/11.2M [00:00<00:00, 22.3MB/s]
PUNCH_L3_CIM_20251031025629_v0i.fits: 24%|██▎ | 3.83M/16.3M [00:00<00:00, 21.4MB/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 21%|██ | 3.38M/16.3M [00:00<00:00, 19.2MB/s]
PUNCH_L3_CIM_20251031024829_v0i.fits: 68%|██████▊ | 7.58M/11.2M [00:00<00:00, 28.0MB/s]
PUNCH_L3_CIM_20251031025629_v0i.fits: 45%|████▌ | 7.38M/16.3M [00:00<00:00, 27.6MB/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 43%|████▎ | 6.94M/16.3M [00:00<00:00, 26.3MB/s]
PUNCH_L3_CIM_20251031024829_v0i.fits: 97%|█████████▋| 10.9M/11.2M [00:00<00:00, 29.6MB/s]
PUNCH_L3_CIM_20251031025629_v0i.fits: 69%|██████▊ | 11.2M/16.3M [00:00<00:00, 31.4MB/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 66%|██████▌ | 10.8M/16.3M [00:00<00:00, 30.9MB/s]
Files Downloaded: 75%|███████▌ | 6/8 [00:01<00:00, 4.86file/s]
PUNCH_L3_CIM_20251031024029_v0i.fits: 100%|█████████▉| 16.3M/16.3M [00:00<00:00, 38.9MB/s]
Files Downloaded: 100%|██████████| 8/8 [00:01<00:00, 6.49file/s]
Files Downloaded: 100%|██████████| 8/8 [00:01<00:00, 5.11file/s]
That file list is then passed into the animator function, along with an output filename.
animate_punch(files, output_path="PUNCH_CIM.mp4")
0%| | 0/8 [00:00<?, ?it/s]
12%|█▎ | 1/8 [00:04<00:33, 4.76s/it]
25%|██▌ | 2/8 [00:04<00:12, 2.08s/it]
38%|███▊ | 3/8 [00:08<00:13, 2.77s/it]
50%|█████ | 4/8 [00:08<00:07, 1.82s/it]
62%|██████▎ | 5/8 [00:12<00:07, 2.48s/it]
75%|███████▌ | 6/8 [00:12<00:03, 1.78s/it]
88%|████████▊ | 7/8 [00:16<00:02, 2.41s/it]
100%|██████████| 8/8 [00:17<00:00, 1.89s/it]
100%|██████████| 8/8 [00:17<00:00, 2.18s/it]
Total running time of the script: (0 minutes 30.830 seconds)