File: wcsaxes_map_example.py

package info (click to toggle)
sunpy 4.1.2-1%2Bdeb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 11,972 kB
  • sloc: python: 39,301; ansic: 1,780; makefile: 35
file content (67 lines) | stat: -rw-r--r-- 2,368 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
"""
===========================
Imshow and maps coordinates
===========================

How to use imshow with a map and overplot points specified by pixel coordinates
and map coordinates.
"""
import matplotlib.pyplot as plt

import astropy.units as u
from astropy.coordinates import SkyCoord

import sunpy.map
from sunpy.data.sample import AIA_171_IMAGE

###############################################################################
# We start with the sample data and create a submap of a smaller region.

aia = sunpy.map.Map(AIA_171_IMAGE)
top_right = SkyCoord(0 * u.arcsec, 1000 * u.arcsec, frame=aia.coordinate_frame)
bottom_left = SkyCoord(-1000 * u.arcsec, 0 * u.arcsec, frame=aia.coordinate_frame)
smap = aia.submap(bottom_left, top_right=top_right)

###############################################################################
# By setting the projection of the axis, a WCSAxes is created and this enables
# the plot to be created with the map coordinates, in this case helioprojective
# coordinates. The standard plot
# command expects pixel coordinates. It is also possible to plot a point using the
# map coordinates if we pass the transformation but this transform expects
# the values to be in degrees and not arcseconds.

# sphinx_gallery_defer_figures

fig = plt.figure()
ax = fig.add_subplot(projection=smap)

ax.imshow(smap.data)

################################################################################
# Add an overlay grid, showing the native coordinates of the map.

# sphinx_gallery_defer_figures

ax.coords.grid(color='yellow', linestyle='solid', alpha=0.5)

################################################################################
# plot a point in the middle of the image

# sphinx_gallery_defer_figures

pixel_coord = [smap.data.shape[0]/2., smap.data.shape[1]/2.] * u.pix
ax.plot(pixel_coord[0], pixel_coord[1], 'x', color='white',
        label=f'Pixel coordinate [{pixel_coord[0]}, {pixel_coord[1]}]')


################################################################################
# Using the transform command expects coordinates in degrees and not arcseconds.

map_coord = ([-300, 200] * u.arcsec)

ax.plot(map_coord[0].to('deg'), map_coord[1].to('deg'), 'o', color='white',
        transform=ax.get_transform('world'),
        label=f'Map coordinate [{map_coord[0]}, {map_coord[1]}]')
ax.legend()

plt.show()