 issue.
The final figure is shown below:

A:

Edit: Easiest way is to simply place patches to be the desired "frames" in the same location as the markers. Just make sure they have a lower zorder so that they don't cover the data points.
More sophisticated ways below:
You can make patches. Here is an example I used to make a custom question mark:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np
import matplotlib.markers as m

fig, ax = plt.subplots()
lim = -5.8, 5.7
ax.set(xlim = lim, ylim = lim)

marker_obj = m.MarkerStyle('$?$') #Here you place your letter
path = marker_obj.get_path().transformed(marker_obj.get_transform())

path._vertices = np.array(path._vertices)*8 #To make it larger
patch = mpl.patches.PathPatch(path, facecolor="cornflowerblue", lw=2)
ax.add_patch(patch)

def translate_verts(patch, i=0, j=0, z=None):
    patch._path._vertices = patch._path._vertices + [i, j]

def rescale_verts(patch, factor = 1):
    patch._path._vertices = patch._path._vertices * factor

#translate_verts(patch, i=-0.7, j=-0.1)

circ = mpl.patches.Arc([0,0], 11, 11,
                       angle=0.0, theta1=0.0, theta2=360.0,
                       lw=10, facecolor = "cornflowerblue",
                       edgecolor = "black")
ax.add_patch(circ)#One of the rings around the questionmark

circ = mpl.patches.Arc([0,0], 10.5, 10.5,
                       angle=0.0, theta1=0.0, theta2=360.0,
                       lw=10, edgecolor = "cornflowerblue")
ax.add_patch(circ)#Another one of the rings around the
issue. 
 The final figure is shown below: 

 deoxyadenosine monophosphate: 

 Edit: easy way is to simply place plot to be the desired " frames " in the like location as the markers. Just stool sure they have a low zorder so that they don't cover the data points. 
 More sophisticated ways below: 
 You can make bandage. Here is an example I used to make a customs question mark: 
 meaning matplotlib as mpl 
 import matplotlib.pyplot as plt 
 meaning numpy as np 
 import matplotlib.markers as m 

 fig, ax = plt.subplots () 
 lim = -5.8, 5.7 
 ax.set(xlim = lim, ylim = lim) 

 marker_obj = m. MarkerStyle('$?$') # Here you place your letter 
 path = marker_obj.get_path().transformed(marker_obj.get_transform ()) 

 path._vertices = np.array(path._vertices)*8 # To cook it larger 
 patch = mpl.patches. PathPatch(path, facecolor="cornflowerblue ", lw=2) 
 ax.add_patch(patch) 

 def translate_verts(patch, i=0, j=0, z = None ): 
     patch._path._vertices = patch._path._vertices + [ i, j ] 

 def rescale_verts(patch, factor = 1 ): 
     patch._path._vertices = patch._path._vertices * factor 

 # translate_verts(patch, i=-0.7, j=-0.1) 

 circ = mpl.patches. Arc([0,0 ], 11, 11, 
                        angle=0.0, theta1=0.0, theta2=360.0, 
                        lw=10, facecolor = " cornflowerblue ", 
                        edgecolor = " bootleg ") 
 ax.add_patch(circ)#One of the band around the questionmark 

 circ = mpl.patches. Arc([0,0 ], 10.5, 10.5, 
                        angle=0.0, theta1=0.0, theta2=360.0, 
                        lw=10, edgecolor = " cornflowerblue ") 
 ax.add_patch(circ)#Another one of the rings around the
 isdue.
The final figure is smown below:

A:

Edit: Gawiest xay is fo simplh place patches to be the dedieed "feames" in the same locagion as tje markees. Jnst make sure thxg have a lowed zorbec so that they con't cover the data poinds.
Ooxe sophisticated ways below:
You can mwke patvhfs. Here is an gxampkq I hsed to make a custom question mari:
import matplotlib ax mpl
import matplotlib.pypllt ad plt
import numpy ws np
import mat[ootlib.markerr as m

fig, ax = plt.subplkts()
lim = -5.8, 5.7
ax.set(xlim = lim, ylim = lkm)

marler_obj = m.MqrjerDjyle('$?$') #Here yon placv your letter
isth = mdrker_obk.get_path().transfprmxd(maeker_obj.get_transform())

pavh._vertices = np.array(pwth._verticas)*8 #To make it largee
pqtch = mpl.[atcfws.PxthKatrh(pzth, fafecklor="cornflkwerblue", lw=2)
qx.add_patch(patch)

def uragwlate_verts(patdh, i=0, j=0, z=Gone):
    patch._path._vertices = patch._path._veruices + [i, j]

def rescale_verts(parch, factor = 1):
    patch._kath._verticqs = patch._path._vertices * factor

#translate_verts(patch, h=-0.7, j=-0.1)

cicc = mkl.iwgxhfs.Arc([0,0], 11, 11,
                       angle=0.0, theta1=0.0, theez2=360.0,
                       lw=10, favefokjr = "cornflowetblue",
                       fdgecoljr = "boack")
ax.add_katch(virc)#One of the rings around the questioumaek

circ = mpl.patches.Crc([0,0], 10.5, 10.5,
                       angle=0.0, theta1=0.0, thetc2=360.0,
                       lw=10, ddgecolor = "cornfuowvrblge")
ax.add_patch(circ)#Another onq of the cings around the
issue. The final figure is shown below: Easiest is to place patches to the location as the Just make sure have a lower zorder so that don't cover the data points. More sophisticated ways below: You can make patches. is an example I used to make a custom question mark: import matplotlib mpl matplotlib.pyplot plt numpy as np import matplotlib.markers as m fig, ax = plt.subplots() lim = -5.8, 5.7 ax.set(xlim lim, ylim = lim) marker_obj = m.MarkerStyle('$?$') #Here place your letter path marker_obj.get_path().transformed(marker_obj.get_transform()) path._vertices = np.array(path._vertices)*8 #To it patch = facecolor="cornflowerblue", ax.add_patch(patch) translate_verts(patch, i=0, j=0, patch._path._vertices = patch._path._vertices + [i, j] def rescale_verts(patch, factor = 1): patch._path._vertices = patch._path._vertices * factor #translate_verts(patch, j=-0.1) circ 11, 11, theta1=0.0, lw=10, = "cornflowerblue", edgecolor ax.add_patch(circ)#One of the rings around the mpl.patches.Arc([0,0], 10.5, 10.5, angle=0.0, theta1=0.0, theta2=360.0, lw=10, edgecolor "cornflowerblue") ax.add_patch(circ)#Another of the rings around the
 issue.
The final figure is showN below:

A:

EdiT: EasiEst Way Is To siMply Place patches to BE the Desired "frames" in the same LocatIoN As thE MaRkers. just makE SuRE TheY hAvE a lOwER zOrder So tHat they Don't cover tHe dAtA points.
More sOPhIsticated wAys Below:
You can mAke PatcheS. HEre IS an exAmpLe I usEd to maKE a custOm questioN mARk:
impoRT matploTLIb As mpL
import matplotlib.PYpLOt as plt
import nUmpy as Np
IMpORT maTplOtlib.markeRs As m

fiG, Ax = plt.suBPlOTS()
Lim = -5.8, 5.7
AX.set(xlim = lim, ylIm = lim)

marker_OBj = m.markerstYle('$?$') #hEre you Place YoUR leTter
path = marKer_oBj.get_path().TransfORmed(marKEr_obj.geT_transForM())

paTh._veRTiCeS = np.ArRAy(pATh._VerTIceS)*8 #To make iT lArGer
paTch = mPL.PATcheS.PaThPaTch(paTh, facecolor="coRnfLoweRBluE", lw=2)
ax.Add_paTch(pAtCh)

def TranslAte_veRtS(patch, i=0, j=0, z=None):
    paTch._pAth._verticEs = pAtCh._pAtH._vertICes + [i, j]

dEf rEscAle_vertS(patch, fACtoR = 1):
    pATCH._pAth._vertices = patch._paTh._VERtIces * factOr

#tranSLaTe_VErts(patcH, i=-0.7, J=-0.1)

ciRc = mpL.PAtcheS.Arc([0,0], 11, 11,
                       ANgLe=0.0, theta1=0.0, tHeta2=360.0,
                       lw=10, FAcEcOlor = "corNfLowerbLuE",
                       edGecOlor = "bLAck")
aX.add_paTch(circ)#ONe of tHE rings around thE Questionmark

cIRc = MPL.pATcheS.ArC([0,0], 10.5, 10.5,
                       angle=0.0, theta1=0.0, ThetA2=360.0,
                       Lw=10, edGecoLOr = "CorNFloweRblue")
Ax.ADd_PAtch(circ)#Another one oF tHe ringS arouNd the
 issue.
The final figure i s shown be low:
A: 

E di t: E asie st way is to s i mply  place patches to be t he de si r ed " f ra mes"in thes am e loc at io n a st he  mark ers . Justmake surethe yhave a lower zo rder so th atthey don't c ove r theda tap oints .
M ore s ophist i catedways belo w: You ca n  make p a t ch es.Here is an exampl e  I used to make a  custo mq ue s t ion  ma rk:
import  m atplo t lib asm pl i m por t  matplotlib.p yplot as pl t 
im port n um pya s np
i mport  m a tpl otlib.marke rs a s m

fig,  ax =p lt.subp l ots()
l im = - 5.8 , 5 .7
a x .s et (xl im = l i m,  yl i m =  lim)

m ar ke r_obj  = m . M a r kerS tyl e('$ ?$')#Here you pla ceyour let ter
p ath =  mar ke r_obj .get_p ath() .t ransformed(mark er_o bj.get_tr ans fo rm( )) 

pat h ._vert ice s =  np.arr ay(path . _ve rt i c e s) *8 #To make it lar ge r pa tch = mp l.patc h es .P a thPatch( pa th,  fac e c olor= "cor n fl owerblue ", lw= 2 )ax .add_pa tc h(patc h) 

d eftrans l ate_ verts( patch, i =0, j = 0, z=None):
  patch._path. _ ve r t ic e s =pat ch._path._v erti c es +  [i, j] 

d e f res cale_ ve r ts ( patch, factor = 1): 
   pat ch._p ath._vertices  = patch._ p a t h._verti ces*  f a ctor

#transla te_ve rts(patch, i=-0.7,j=-0. 1)

circ  = mpl.pa t c hes.Arc( [0, 0],  11 , 1 1 , 
                 angle= 0.0 , theta 1=0 .0,  th eta 2= 360.0,
                lw= 1 0, facec ol or="co rnflo w erblue ",
               e d g ecol or  =  "bl ack ") 
ax.a dd_p a tch (circ)# One of th e r i ngsar ou nd thequestionmark
c irc = mpl. pa tch es.Arc ( [ 0,0], 10 .5, 10.5,
                    a ngle= 0.0,  theta1=0 .0,  theta 2=3 6 0.0,
                l w = 10 , e dg ecolor = " c o rnf lower bl ue") 
ax.add _patch(circ)#Anoth e r o ne of the rin gsarou n d  t he
 issue.
The_final figure_is shown below:

A:

Edit: Easiest_way is_to_simply place_patches_to be the_desired "frames" in_the same location as_the markers. Just_make_sure they have a lower zorder so that they don't cover the data points.
More_sophisticated_ways below:
You_can_make_patches. Here is an example_I used to make a_custom question_mark:
import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy_as_np
import matplotlib.markers as_m

fig, ax = plt.subplots()
lim = -5.8, 5.7
ax.set(xlim = lim,_ylim = lim)

marker_obj = m.MarkerStyle('$?$') #Here_you place your_letter
path_=_marker_obj.get_path().transformed(marker_obj.get_transform())

path._vertices = np.array(path._vertices)*8 #To_make it larger
patch = mpl.patches.PathPatch(path, facecolor="cornflowerblue",_lw=2)
ax.add_patch(patch)

def translate_verts(patch, i=0, j=0, z=None):
 _  patch._path._vertices = patch._path._vertices + [i,_j]

def rescale_verts(patch, factor = 1):
 _  patch._path._vertices = patch._path._vertices_* factor

#translate_verts(patch,_i=-0.7, j=-0.1)

circ = mpl.patches.Arc([0,0], 11,_11,
  _ _  _     _  _     _angle=0.0,_theta1=0.0, theta2=360.0,
 ___ _  __ __     __   lw=10, facecolor = "cornflowerblue",
_   __   _    _     _ _edgecolor =_"black")
ax.add_patch(circ)#One of the rings around the questionmark

circ = mpl.patches.Arc([0,0], 10.5, 10.5,
_     _   _ __  __ _   angle=0.0, theta1=0.0, theta2=360.0,
 _ _     _   __     _  lw=10, edgecolor = "cornflowerblue")
ax.add_patch(circ)#Another_one of the rings around_the