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)
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')