This notebook plots the fine structures in the east upflow region observed by EUI/HRIEUV and IRIS/SJI, enhancement by the Wavelet-Optimized Whitening (WOW) algorithm. Link to Figure 7.

Note: The internal hyperlink only works on GitHub Pages or nbviewer. Do not click when viewing the notebook on GitHub.

In [1]:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import (rc_context, rcParams, patches, 
            patheffects as path_effects)
import sunpy
import sunpy.map
from sunpy.coordinates import propagate_with_solar_surface
from astropy.coordinates import SkyCoord
import astropy.constants as const
import astropy.units as u
from astropy.visualization import ImageNormalize, AsinhStretch
from glob import glob
from watroo import wow
from fancy_colorbar import plot_colorbar
from sjireader import read_iris_sji
In [2]:
ms_style_dict = {'text.usetex': True, 'font.family': 'serif', 'axes.linewidth': 1.2,
                 'xtick.major.width': 1.2, 'xtick.major.size': 4,
                 'ytick.major.width': 1.2, 'ytick.major.size': 4,
                 'xtick.minor.width': 1.2, 'xtick.minor.size': 2,
                 'ytick.minor.width': 1.2, 'ytick.minor.size': 2,
                 'xtick.direction': 'in', 'ytick.direction': 'in',
                 'text.latex.preamble': r'\usepackage[T1]{fontenc}'
                 r'\usepackage{amsmath}' r'\usepackage{siunitx}'
                 r'\sisetup{detect-all=True}'}
rcParams.update(ms_style_dict)
In [3]:
hri_maps_1024 = sorted(glob('../../src/EUI/HRI/euv174/20221024/coalign_step_boxcar/*.fits'))
hri_map_1024 = sunpy.map.Map(hri_maps_1024[181])
Txshift_hri_1024, Tyshift_hri_1024 = (1.66986 + 2.49223)*u.arcsec,(7.60204 - 2.76366 )*u.arcsec
hri_map_1024 = hri_map_1024.shift_reference_coord(Txshift_hri_1024, Tyshift_hri_1024)
hri_map_1024 = hri_map_1024.submap([300,200]*u.pix, top_right=[2000,1900]*u.pix)
In [4]:
hri_map_1024_wow = sunpy.map.Map(wow(hri_map_1024.data, bilateral=1, denoise_coefficients=[5,3])[0], 
                                 hri_map_1024.meta)
hri_map_1024_wow_zoomin = hri_map_1024_wow.submap([210,140]*u.pix, top_right=[520,600]*u.pix)
hri_map_1024_wow_zoomin_region_1 = hri_map_1024_wow.submap([210,400]*u.pix, top_right=[370,560]*u.pix)
hri_map_1024_wow_zoomin_region_2 = hri_map_1024_wow.submap([230,200]*u.pix, top_right=[430,400]*u.pix)
In [5]:
eis_195_velmap_derot_repro_hrifov = sunpy.map.Map("../../src/EIS/DHB_007_v2/20221025T0023/sunpymaps/eis_195_velmap_derot_repro_hrifov.fits")
In [6]:
hri_map_1024_wow_data = hri_map_1024_wow.data.copy()
hri_map_1024_wow_data_indices_y, hri_map_1024_wow_data_indices_x = np.indices(hri_map_1024_wow_data.shape)
hri_map_1024_colorful_mask = (hri_map_1024_wow_data_indices_y > 140) & (hri_map_1024_wow_data_indices_y <= 600) \
                                      & (hri_map_1024_wow_data_indices_x <= 520) & (hri_map_1024_wow_data_indices_x > 210)
hri_map_1024_wow_data[~hri_map_1024_colorful_mask] = np.nan
hri_map_1024_wow_colorful = plt.get_cmap('sdoaia171')(ImageNormalize()(hri_map_1024_wow_data))
In [7]:
hri_map_1024_wow_zoomin_edges = sunpy.map.map_edges(hri_map_1024_wow_zoomin)
hri_map_1024_wow_zoomin_region_1_edges = sunpy.map.map_edges(hri_map_1024_wow_zoomin_region_1)
hri_map_1024_wow_zoomin_region_2_edges = sunpy.map.map_edges(hri_map_1024_wow_zoomin_region_2)
In [8]:
hri_map_1024_east_1_array = np.load('../../sav/optical_flow/eui_map_crop_array_0500_0600_0670_0760_1024.npz')['eui_map_seq_crop_array']
hri_map_1024_zoomin_region_1_std = np.nanstd(hri_map_1024_east_1_array[:,10:,:],axis=2)/np.nanmean(hri_map_1024_east_1_array[:,10:,:],axis=2)
hri_map_1024_zoomin_region_1_std_map = sunpy.map.Map(hri_map_1024_zoomin_region_1_std, hri_map_1024_wow_zoomin_region_1.meta)
In [9]:
hri_map_1024_east_2_array = np.load('../../sav/optical_flow/eui_map_crop_array_0520_0400_0730_0600_1024.npz')['eui_map_seq_crop_array']
hri_map_1024_zoomin_region_2_std = np.nanstd(hri_map_1024_east_2_array[:,10:,:],axis=2)/np.nanmean(hri_map_1024_east_2_array[:,10:,:],axis=2)
hri_map_1024_zoomin_region_2_std_map = sunpy.map.Map(hri_map_1024_zoomin_region_2_std, hri_map_1024_wow_zoomin_region_2.meta)
In [10]:
iris_sji_1330_map = read_iris_sji('../../src/IRIS/20221024/2219/iris_l2_20221024_221954_3620511149_SJI_1330_t000.fits', index=1).rotate()
iris_sji_1400_map = read_iris_sji('../../src/IRIS/20221024/2219/iris_l2_20221024_221954_3620511149_SJI_1400_t000.fits', index=1).rotate()
iris_sji_2796_map = read_iris_sji('../../src/IRIS/20221024/2219/iris_l2_20221024_221954_3620511149_SJI_2796_t000_deconvolved.fits', index=1).rotate()
In [11]:
with propagate_with_solar_surface(rotation_model='rigid'):
    iris_sji_1330_map_zoomin_region_1 = iris_sji_1330_map.submap(hri_map_1024_zoomin_region_1_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_1_std_map.top_right_coord)
    iris_sji_1400_map_zoomin_region_1 = iris_sji_1400_map.submap(hri_map_1024_zoomin_region_1_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_1_std_map.top_right_coord)
    iris_sji_2796_map_zoomin_region_1 = iris_sji_2796_map.submap(hri_map_1024_zoomin_region_1_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_1_std_map.top_right_coord)

iris_sji_1330_map_zoomin_region_1_wow = sunpy.map.Map(wow(iris_sji_1330_map_zoomin_region_1.data, bilateral=1, denoise_coefficients=[5,3])[0],
                                                        iris_sji_1330_map_zoomin_region_1.meta)

iris_sji_1400_map_zoomin_region_1_wow = sunpy.map.Map(wow(iris_sji_1400_map_zoomin_region_1.data, bilateral=1, denoise_coefficients=[5,3])[0],
                                                        iris_sji_1400_map_zoomin_region_1.meta) 

iris_sji_2796_map_zoomin_region_1_wow = sunpy.map.Map(wow(iris_sji_2796_map_zoomin_region_1.data, bilateral=1, denoise_coefficients=[2,1])[0],
                                                        iris_sji_2796_map_zoomin_region_1.meta)
In [12]:
with propagate_with_solar_surface(rotation_model='rigid'):
    iris_sji_1330_map_zoomin_region_2 = iris_sji_1330_map.submap(hri_map_1024_zoomin_region_2_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_2_std_map.top_right_coord)
    iris_sji_1400_map_zoomin_region_2 = iris_sji_1400_map.submap(hri_map_1024_zoomin_region_2_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_2_std_map.top_right_coord)
    iris_sji_2796_map_zoomin_region_2 = iris_sji_2796_map.submap(hri_map_1024_zoomin_region_2_std_map.bottom_left_coord,
                                                        top_right=hri_map_1024_zoomin_region_2_std_map.top_right_coord)
    
iris_sji_1330_map_zoomin_region_2_wow = sunpy.map.Map(wow(iris_sji_1330_map_zoomin_region_2.data, bilateral=1, denoise_coefficients=[5,3])[0],
                                                        iris_sji_1330_map_zoomin_region_2.meta)

iris_sji_1400_map_zoomin_region_2_wow = sunpy.map.Map(wow(iris_sji_1400_map_zoomin_region_2.data, bilateral=1, denoise_coefficients=[5,3])[0],
                                                        iris_sji_1400_map_zoomin_region_2.meta)

iris_sji_2796_map_zoomin_region_2_wow = sunpy.map.Map(wow(iris_sji_2796_map_zoomin_region_2.data, bilateral=1, denoise_coefficients=[2,1])[0],
                                                        iris_sji_2796_map_zoomin_region_2.meta)

Figure 7¶

(You may have to pull down to see the notebook preview of the figure)

back to top

In [13]:
fig = plt.figure(figsize=(11.5,4),layout='constrained')

gs1 = fig.add_gridspec(nrows=2, ncols=6, wspace=0, hspace=0,width_ratios=[1,1,1,1/np.divide(*iris_sji_2796_map_zoomin_region_1_wow.data.shape),
                                                                          1/np.divide(*iris_sji_2796_map_zoomin_region_1_wow.data.shape),
                                                                          1/np.divide(*iris_sji_2796_map_zoomin_region_1_wow.data.shape)])
ax1 = fig.add_subplot(gs1[:,:2], projection=hri_map_1024)

hri_map_1024_wow.plot(norm=ImageNormalize(),cmap='grey',title=False,
                      axes=ax1)

ax1.imshow(hri_map_1024_wow_colorful, origin='lower', alpha=0.9)

ax1_zoomin = ax1.inset_axes([0.4,140/1700,0.55,0.78], projection=hri_map_1024_wow_zoomin,
                            transform=ax1.transAxes)

hri_map_1024_wow_zoomin.plot(norm=ImageNormalize(),title=False,axes=ax1_zoomin,cmap='sdoaia171',
                             )

ax1_zoomin_bounds = ax1_zoomin.axis()
cs = eis_195_velmap_derot_repro_hrifov.draw_contours(levels=[-10,-5,5,10],colors=["#005CAF","#58B2DC","#F05E1C","#E83015"],
                                                     alpha=0.8,axes=ax1_zoomin)
legend_artist = [plt.Line2D([0],[0], color="#005CAF", lw=1.2),
                 plt.Line2D([0],[0], color="#58B2DC", lw=1.2),
                 plt.Line2D([0],[0], color="#F05E1C", lw=1.2),]
legend_labels = [r'$-10\,\mathrm{km\,s^{-1}}$',r'$-5\,\mathrm{km\,s^{-1}}$',r'$+5\,\mathrm{km\,s^{-1}}$']
ax1.legend(legend_artist,legend_labels,bbox_to_anchor=(0.05, 1.0, 0.9, 0.1), frameon=False,fontsize=10,
           mode='expand', ncol=3, handlelength=1,handletextpad=0.4)

ax1_zoomin.axis(ax1_zoomin_bounds)

for edge in hri_map_1024_wow_zoomin_edges:
    edge_x, edge_y = edge.T.to_value(u.pix)
    ax1.plot(edge_x + 210, edge_y + 140, lw=1.2, color='white')

for edge in hri_map_1024_wow_zoomin_region_1_edges:
    edge_x, edge_y = edge.T.to_value(u.pix)
    ax1_zoomin.plot(edge_x + 210 - 210, edge_y + 400 - 140, 
                    lw=2, color='#86C166', ls='-')

for edge in hri_map_1024_wow_zoomin_region_2_edges:
    edge_x, edge_y = edge.T.to_value(u.pix)
    ax1_zoomin.plot(edge_x + 230 - 210, edge_y + 200 - 140, 
                    lw=2, color='#EB7A77', ls='-')



connect_patch_0 = patches.ConnectionPatch(xyA=(520, 140), xyB=(0,0),
        coordsA="data", coordsB="axes fraction",axesA=ax1, axesB=ax1_zoomin, color="white",
        zorder=2,lw=1.2,ls=':')

connect_patch_1 = patches.ConnectionPatch(xyA=(210, 600), xyB=(0,1),
        coordsA="data", coordsB="axes fraction",axesA=ax1, axesB=ax1_zoomin, color="white",
        zorder=2,lw=1.2,ls=':')

# connect_patch_2 = patches.ConnectionPatch(xyA=(520, 600), xyB=(1,1),
#         coordsA="data", coordsB="axes fraction",axesA=ax1, axesB=ax1_zoomin, color="white",
#         zorder=2,lw=1.2,ls=':')

for patch_ in (connect_patch_0, connect_patch_1):
    fig.add_artist(patch_)

ax1_zoomin.coords[0].set_ticklabel_visible(False)
ax1_zoomin.coords[1].set_ticklabel_visible(False)
ax1_zoomin.coords[0].set_ticks(color='white')
ax1_zoomin.coords[1].set_ticks(color='white')
ax1_zoomin.coords[0].frame._color = 'white'

ax1.text(0.03,0.97,r'\textbf{HRI\textsubscript{EUV} 17.4\,nm (WOW)} '
         r'\textbf{\& EIS Doppler} $\boldsymbol{v}_{\textbf{Fe\,\textsc{xii}}}$' + '\n'
         r'$\boldsymbol{{t_{{\mathrm{{obs}},\oplus}}}}$\textbf{{: {}}}'.format(hri_map_1024_wow.meta['date_ear'][:-4]),
         fontsize=10,transform=ax1.transAxes,va='top',ha='left',color='white', linespacing=1.3,
         path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax1.text(0.03,0.03,r'\textbf{a)}',fontsize=10,transform=ax1.transAxes,va='bottom',ha='left',color='white',
         path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax1.set_xlabel('Helioprojective Longitude (Solar-X)',fontsize=12)
ax1.set_ylabel('Helioprojective Latitude (Solar-Y)',fontsize=12)


# gs2 = gs1[0,1].subgridspec(1,2)
ax2 = fig.add_subplot(gs1[0,2],projection=hri_map_1024_wow_zoomin_region_1)
im2 = hri_map_1024_wow_zoomin_region_1.plot(title=False,axes=ax2,
                                            norm=ImageNormalize())

ax2.text(0.03,0.94,r'\textbf{b)}',fontsize=10,transform=ax2.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax2.text(0.03,0.03,r'\textbf{HRI\textsubscript{EUV}}',fontsize=10,
            transform=ax2.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

# ax2 = fig.add_subplot(gs1[0,2],projection=hri_map_1024_zoomin_region_1_std_map)
# im2 = hri_map_1024_zoomin_region_1_std_map.plot(norm=ImageNormalize(vmin=0.05,vmax=0.35),cmap='inferno',title=False,axes=ax2)

# clb2, clb_ax2 = plot_colorbar(im2, ax2,
#                                     bbox_to_anchor=(0.05,1.04,0.9,0.08), orientation='horizontal',
#                                     fontsize=10,scilimits=(-2,2))
# clb_ax2.xaxis.tick_top()
# clb_ax2.xaxis.set_label_position('top') 

# ax2.text(0.03,0.94,r'\textbf{b)}',fontsize=10,transform=ax2.transAxes,va='top',ha='left',color='white',
#             path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

# ax2.text(0.03,0.03,r'\textbf{HRI\textsubscript{EUV}} $\boldsymbol{\sigma/\mu}$',fontsize=10,
#          transform=ax2.transAxes,va='bottom',ha='left',color='white',
#          path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])


ax3 = fig.add_subplot(gs1[0,3],projection=iris_sji_1400_map_zoomin_region_1_wow)
im3 = iris_sji_1400_map_zoomin_region_1_wow.plot(title=False,axes=ax3, 
                                                 norm=ImageNormalize(vmin=np.nanpercentile(iris_sji_1400_map_zoomin_region_1_wow.data, 1),
                                                               vmax=np.nanpercentile(iris_sji_1400_map_zoomin_region_1_wow.data, 99.5)))

ax3.text(0.03,0.94,r'\textbf{c)}',fontsize=10,transform=ax3.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax3.text(0.03,0.03,r'\textbf{IRIS/SJI 140.0\,nm}' + \
            '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_1400_map_zoomin_region_1_wow.date.isot[10:-4]),fontsize=10,
            transform=ax3.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax4 = fig.add_subplot(gs1[0,4],projection=iris_sji_1330_map_zoomin_region_1_wow)
im4 = iris_sji_1330_map_zoomin_region_1_wow.plot(title=False,axes=ax4)

ax4.text(0.03,0.94,r'\textbf{d)}',fontsize=10,transform=ax4.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax4.text(0.03,0.03,r'\textbf{IRIS/SJI 133.0\,nm}' + \
         '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_1330_map_zoomin_region_1_wow.date.isot[10:-4]),fontsize=10,
            transform=ax4.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax5 = fig.add_subplot(gs1[0,5],projection=iris_sji_2796_map_zoomin_region_1_wow)
im5 = iris_sji_2796_map_zoomin_region_1_wow.plot(title=False,axes=ax5,
                                                 norm=ImageNormalize(vmin=np.nanpercentile(iris_sji_2796_map_zoomin_region_1_wow.data, 1),
                                                   vmax=np.nanpercentile(iris_sji_2796_map_zoomin_region_1_wow.data, 99.8)),)

ax5.text(0.03,0.94,r'\textbf{e)}',fontsize=10,transform=ax5.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax5.text(0.03,0.03,r'\textbf{IRIS/SJI 279.6\,nm}' + \
            '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_2796_map_zoomin_region_1_wow.date.isot[10:-4]),fontsize=10,
            transform=ax5.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax6 = fig.add_subplot(gs1[1,2],projection=hri_map_1024_wow_zoomin_region_2)
im6 = hri_map_1024_wow_zoomin_region_2.plot(title=False,axes=ax6,
                                            norm=ImageNormalize())

ax6.text(0.03,0.94,r'\textbf{f)}',fontsize=10,transform=ax6.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax6.text(0.03,0.03,r'\textbf{HRI\textsubscript{EUV}}',fontsize=10,
            transform=ax6.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

# ax6 = fig.add_subplot(gs1[1,2],projection=hri_map_1024_zoomin_region_2_std_map)
# im6 = hri_map_1024_zoomin_region_2_std_map.plot(norm=ImageNormalize(vmin=0.05,vmax=0.35),cmap='inferno',title=False,axes=ax6)

# clb6, clb_ax6 = plot_colorbar(im6, ax6,
#                                     bbox_to_anchor=(0.05,1.04,0.9,0.08), orientation='horizontal',
#                                     fontsize=10,scilimits=(-2,2))

# clb_ax6.xaxis.tick_top()
# clb_ax6.xaxis.set_label_position('top')

# ax6.text(0.03,0.94,r'\textbf{f)}',fontsize=10,transform=ax6.transAxes,va='top',ha='left',color='white',
#             path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

# ax6.text(0.03,0.03,r'\textbf{HRI\textsubscript{EUV}} $\boldsymbol{\sigma/\mu}$',fontsize=10,
#             transform=ax6.transAxes,va='bottom',ha='left',color='white',
#             path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])


ax7 = fig.add_subplot(gs1[1,3],projection=iris_sji_1400_map_zoomin_region_2_wow)
im7 = iris_sji_1400_map_zoomin_region_2_wow.plot(title=False,axes=ax7,
                                                 norm=ImageNormalize(vmin=np.nanpercentile(iris_sji_1400_map_zoomin_region_2_wow.data, 1),
                                                   vmax=np.nanpercentile(iris_sji_1400_map_zoomin_region_2_wow.data, 99.5)))

ax7.text(0.03,0.94,r'\textbf{g)}',fontsize=10,transform=ax7.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax7.text(0.03,0.03,r'\textbf{IRIS/SJI 140.0\,nm}' + \
            '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_1400_map_zoomin_region_2_wow.date.isot[10:-4]),fontsize=10,
            transform=ax7.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax8 = fig.add_subplot(gs1[1,4],projection=iris_sji_1330_map_zoomin_region_2_wow)
im8 = iris_sji_1330_map_zoomin_region_2_wow.plot(title=False,axes=ax8)

ax8.text(0.03,0.94,r'\textbf{h)}',fontsize=10,transform=ax8.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax8.text(0.03,0.03,r'\textbf{IRIS/SJI 133.0\,nm}' + \
            '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_1330_map_zoomin_region_2_wow.date.isot[10:-4]),fontsize=10,
            transform=ax8.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax9 = fig.add_subplot(gs1[1,5],projection=iris_sji_2796_map_zoomin_region_2_wow)
im9 = iris_sji_2796_map_zoomin_region_2_wow.plot(title=False,axes=ax9,
                                                 norm=ImageNormalize(vmin=np.nanpercentile(iris_sji_2796_map_zoomin_region_2_wow.data, 1),
                                                   vmax=np.nanpercentile(iris_sji_2796_map_zoomin_region_2_wow.data, 99.8)),)

ax9.text(0.03,0.94,r'\textbf{i)}',fontsize=10,transform=ax9.transAxes,va='top',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])

ax9.text(0.03,0.03,r'\textbf{IRIS/SJI 279.6\,nm}' + \
            '\n' + r'\textbf{{{} (WOW)}}'.format(iris_sji_2796_map_zoomin_region_2_wow.date.isot[10:-4]),fontsize=10,
            transform=ax9.transAxes,va='bottom',ha='left',color='white',
            path_effects=[path_effects.Stroke(linewidth=2, foreground='black'),path_effects.Normal()])


edge_x_r1_3, edge_y_r1_3 = hri_map_1024_wow_zoomin_region_1_edges[3].T.to_value(u.pix)

connect_patch_zoomin_r1_0 = patches.ConnectionPatch(xyA=(edge_x_r1_3[0] + 210 - 210, edge_y_r1_3[0] + 400 - 140), xyB=(0,0),
        coordsA="data", coordsB="axes fraction",axesA=ax1_zoomin, axesB=ax2, color="#86C166",
        zorder=100,lw=2,ls=':') 
connect_patch_zoomin_r1_1 = patches.ConnectionPatch(xyA=(edge_x_r1_3[0] + 210 - 210, edge_y_r1_3[-1] + 400 - 140), xyB=(0,1),
        coordsA="data", coordsB="axes fraction",axesA=ax1_zoomin, axesB=ax2, color="#86C166",
        zorder=100,lw=2,ls=':') 

edge_x_r2_3, edge_y_r2_3 = hri_map_1024_wow_zoomin_region_2_edges[3].T.to_value(u.pix)

connect_patch_zoomin_r2_0 = patches.ConnectionPatch(xyA=(edge_x_r2_3[0] + 230 - 210, edge_y_r2_3[0] + 200 - 140), xyB=(0,0),
        coordsA="data", coordsB="axes fraction",axesA=ax1_zoomin, axesB=ax6, color="#EB7A77",
        zorder=100,lw=2,ls=':')

connect_patch_zoomin_r2_1 = patches.ConnectionPatch(xyA=(edge_x_r2_3[0] + 230 - 210, edge_y_r2_3[-1] + 200 - 140), xyB=(0,1),
        coordsA="data", coordsB="axes fraction",axesA=ax1_zoomin, axesB=ax6, color="#EB7A77",
        zorder=100,lw=2,ls=':')

for patch_ in (connect_patch_zoomin_r1_0,connect_patch_zoomin_r1_1,
               connect_patch_zoomin_r2_0,connect_patch_zoomin_r2_1):
    fig.add_artist(patch_)

for ax_ in (ax2,ax3,ax4,ax5,ax6,ax7,ax8,ax9):
    ax_.coords[0].axislabels.set_visible(False)
    ax_.coords[1].axislabels.set_visible(False)

for ax_ in (ax2,ax6):
    ax_.coords[0].set_ticks(spacing=30*u.arcsec)
    ax_.coords[1].set_ticks(spacing=30*u.arcsec)

for ax_ in (ax7,ax8,ax9):
    ax_.coords[0].set_ticks(spacing=20*u.arcsec)
    ax_.coords[1].set_ticks(spacing=20*u.arcsec)

for ax_ in (ax4,ax5,ax8,ax9):
    ax_.coords[1].set_ticklabel_visible(False)

# from matplotlib._layoutgrid import plot_children
# plot_children(fig)

fig.get_layout_engine().set(w_pad=0, h_pad=1/72., hspace=0,
                        wspace=0)


plt.savefig('../../figs/ms_eis_eui_upflow/hri_east_upflow.pdf',dpi=300,bbox_inches='tight')
No description has been provided for this image