Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit73bf2bb

Browse files
committed
Fix xkcd() not resetting context anymore.
1 parent0aaf239 commit73bf2bb

File tree

2 files changed

+47
-24
lines changed

2 files changed

+47
-24
lines changed

‎lib/matplotlib/pyplot.py

Lines changed: 33 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
importsix
2222

2323
importsys
24-
importwarnings
2524
importtime
2625
importtypes
26+
importwarnings
2727

2828
fromcyclerimportcycler
2929
importmatplotlib
@@ -389,28 +389,38 @@ def xkcd(scale=1, length=100, randomness=2):
389389
"xkcd mode is not compatible with text.usetex = True")
390390

391391
frommatplotlibimportpatheffects
392-
context=rc_context()
393-
try:
394-
rcParams['font.family']= ['xkcd','Humor Sans','Comic Sans MS']
395-
rcParams['font.size']=14.0
396-
rcParams['path.sketch']= (scale,length,randomness)
397-
rcParams['path.effects']= [
398-
patheffects.withStroke(linewidth=4,foreground="w")]
399-
rcParams['axes.linewidth']=1.5
400-
rcParams['lines.linewidth']=2.0
401-
rcParams['figure.facecolor']='white'
402-
rcParams['grid.linewidth']=0.0
403-
rcParams['axes.grid']=False
404-
rcParams['axes.unicode_minus']=False
405-
rcParams['axes.edgecolor']='black'
406-
rcParams['xtick.major.size']=8
407-
rcParams['xtick.major.width']=3
408-
rcParams['ytick.major.size']=8
409-
rcParams['ytick.major.width']=3
410-
except:
411-
context.__exit__(*sys.exc_info())
412-
raise
413-
returncontext
392+
xkcd_ctx=rc_context({
393+
'font.family': ['xkcd','Humor Sans','Comic Sans MS'],
394+
'font.size':14.0,
395+
'path.sketch': (scale,length,randomness),
396+
'path.effects': [patheffects.withStroke(linewidth=4,foreground="w")],
397+
'axes.linewidth':1.5,
398+
'lines.linewidth':2.0,
399+
'figure.facecolor':'white',
400+
'grid.linewidth':0.0,
401+
'axes.grid':False,
402+
'axes.unicode_minus':False,
403+
'axes.edgecolor':'black',
404+
'xtick.major.size':8,
405+
'xtick.major.width':3,
406+
'ytick.major.size':8,
407+
'ytick.major.width':3,
408+
})
409+
xkcd_ctx.__enter__()
410+
411+
# In order to make the call to `xkcd` that does not use a context manager
412+
# (cm) work, we need to enter into the cm ourselves, and return a dummy
413+
# cm that does nothing on entry and cleans up the xkcd context on exit.
414+
# Additionally, we need to keep a reference to the dummy cm because it
415+
# would otherwise be exited when GC'd.
416+
417+
classdummy_ctx(object):
418+
def__enter__(self):
419+
pass
420+
421+
__exit__=xkcd_ctx.__exit__
422+
423+
returndummy_ctx()
414424

415425

416426
## Figures ##

‎lib/matplotlib/tests/test_style.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
importpytest
1212

1313
importmatplotlibasmpl
14-
frommatplotlibimportstyle
14+
frommatplotlibimportpyplotasplt,style
1515
frommatplotlib.style.coreimportUSER_LIBRARY_PATHS,STYLE_EXTENSION
1616

1717
importsix
@@ -158,3 +158,16 @@ def test_alias(equiv_styles):
158158
rc_base=rc_dicts[0]
159159
fornm,rcinzip(equiv_styles[1:],rc_dicts[1:]):
160160
assertrc_base==rc
161+
162+
163+
deftest_xkcd_no_cm():
164+
assertmpl.rcParams["path.sketch"]isNone
165+
plt.xkcd()
166+
assertmpl.rcParams["path.sketch"]== (1,100,2)
167+
168+
169+
deftest_xkcd_cm():
170+
assertmpl.rcParams["path.sketch"]isNone
171+
withplt.xkcd():
172+
assertmpl.rcParams["path.sketch"]== (1,100,2)
173+
assertmpl.rcParams["path.sketch"]isNone

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp