@@ -313,169 +313,59 @@ def test_bbox_clipping():
313313 t .set_bbox ({"boxstyle" : "round, pad=0.1" })
314314
315315
316- @image_comparison (baseline_images = ['annotation_negative_coords ' ],
316+ @image_comparison (baseline_images = ['annotation_negative_ax_coords ' ],
317317 extensions = ['png' ])
318- def test_annotation_negative_coords ():
319- fig = plt .figure ()
320- ax = plt .subplot (1 , 1 , 1 )
321-
322- ax .annotate ("+fpt" , (15 , 40 ), xycoords = "figure points" )
323- ax .annotate ("+fpx" , (25 , 30 ), xycoords = "figure pixels" )
324- ax .annotate ("+apt" , (35 , 20 ), xycoords = "axes points" )
325- ax .annotate ("+apx" , (45 , 10 ), xycoords = "axes pixels" )
326-
327- ax .annotate ("-fpt" , (- 55 , - 40 ), xycoords = "figure points" )
328- ax .annotate ("-fpx" , (- 45 , - 30 ), xycoords = "figure pixels" )
329- ax .annotate ("-apt" , (- 35 , - 20 ), xycoords = "axes points" )
330- ax .annotate ("-apx" , (- 25 , - 10 ), xycoords = "axes pixels" )
331-
332-
333- @cleanup
334- def test_text_annotation_get_window_extent ():
335- figure = Figure (dpi = 100 )
336- renderer = RendererAgg (200 , 200 , 100 )
337-
338- # Only text annotation
339- annotation = Annotation ('test' , xy = (0 , 0 ))
340- annotation .set_figure (figure )
341-
342- text = Text (text = 'test' , x = 0 , y = 0 )
343- text .set_figure (figure )
344-
345- bbox = annotation .get_window_extent (renderer = renderer )
346-
347- text_bbox = text .get_window_extent (renderer = renderer )
348- eq_ (bbox .width , text_bbox .width )
349- eq_ (bbox .height , text_bbox .height )
350-
351- _ , _ , d = renderer .get_text_width_height_descent (
352- 'text' , annotation ._fontproperties , ismath = False )
353- _ , _ , lp_d = renderer .get_text_width_height_descent (
354- 'lp' , annotation ._fontproperties , ismath = False )
355- below_line = max (d , lp_d )
356-
357- # These numbers are specific to the current implementation of Text
358- points = bbox .get_points ()
359- eq_ (points [0 , 0 ], 0.0 )
360- eq_ (points [1 , 0 ], text_bbox .width )
361- eq_ (points [0 , 1 ], - below_line )
362- eq_ (points [1 , 1 ], text_bbox .height - below_line )
363-
364-
365- @cleanup
366- def test_text_with_arrow_annotation_get_window_extent ():
367- headwidth = 21
368- fig , ax = plt .subplots (dpi = 100 )
369- txt = ax .text (s = 'test' , x = 0 , y = 0 )
370- ann = ax .annotate (
371- 'test' ,
372- xy = (0.0 , 50.0 ),
373- xytext = (50.0 , 50.0 ), xycoords = 'figure pixels' ,
374- arrowprops = {
375- 'facecolor' : 'black' , 'width' : 2 ,
376- 'headwidth' : headwidth , 'shrink' : 0.0 })
377-
378- plt .draw ()
379- renderer = fig .canvas .renderer
380- # bounding box of text
381- text_bbox = txt .get_window_extent (renderer = renderer )
382- # bounding box of annotation (text + arrow)
383- bbox = ann .get_window_extent (renderer = renderer )
384- # bounding box of arrow
385- arrow_bbox = ann .arrow_patch .get_window_extent (renderer )
386- # bounding box of annotation text
387- ann_txt_bbox = Text .get_window_extent (ann )
388-
389- # make sure annotation width is 50 px wider than
390- # just the text
391- eq_ (bbox .width , text_bbox .width + 50.0 )
392- # make sure the annotation text bounding box is same size
393- # as the bounding box of the same string as a Text object
394- eq_ (ann_txt_bbox .height , text_bbox .height )
395- eq_ (ann_txt_bbox .width , text_bbox .width )
396- # compute the expected bounding box of arrow + text
397- expected_bbox = Bbox .union ([ann_txt_bbox , arrow_bbox ])
398- assert_almost_equal (bbox .height , expected_bbox .height )
399-
400-
401- @cleanup
402- def test_arrow_annotation_get_window_extent ():
403- dpi = 100
404- dots_per_point = dpi / 72
405- figure = Figure (dpi = dpi )
406- figure .set_figwidth (2.0 )
407- figure .set_figheight (2.0 )
408- renderer = RendererAgg (200 , 200 , 100 )
409-
410- # Text annotation with arrow; arrow dimensions are in points
411- annotation = Annotation (
412- '' , xy = (0.0 , 50.0 ), xytext = (50.0 , 50.0 ), xycoords = 'figure pixels' ,
413- arrowprops = {
414- 'facecolor' : 'black' , 'width' : 8 , 'headwidth' : 10 , 'shrink' : 0.0 })
415- annotation .set_figure (figure )
416- annotation .draw (renderer )
417-
418- bbox = annotation .get_window_extent ()
419- points = bbox .get_points ()
420-
421- eq_ (bbox .width , 50.0 )
422- assert_almost_equal (bbox .height , 10.0 * dots_per_point )
423- eq_ (points [0 , 0 ], 0.0 )
424- eq_ (points [0 , 1 ], 50.0 - 5 * dots_per_point )
425-
426-
427- @cleanup
428- def test_empty_annotation_get_window_extent ():
429- figure = Figure (dpi = 100 )
430- figure .set_figwidth (2.0 )
431- figure .set_figheight (2.0 )
432- renderer = RendererAgg (200 , 200 , 100 )
433-
434- # Text annotation with arrow
435- annotation = Annotation (
436- '' , xy = (0.0 , 50.0 ), xytext = (0.0 , 50.0 ), xycoords = 'figure pixels' )
437- annotation .set_figure (figure )
438- annotation .draw (renderer )
439-
440- bbox = annotation .get_window_extent ()
441- points = bbox .get_points ()
442-
443- eq_ (points [0 , 0 ], 0.0 )
444- eq_ (points [1 , 0 ], 0.0 )
445- eq_ (points [1 , 1 ], 50.0 )
446- eq_ (points [0 , 1 ], 50.0 )
447-
318+ def test_annotation_negative_ax_coords ():
319+ fig , ax = plt .subplots ()
448320
449- @image_comparison (baseline_images = ['basictext_wrap' ],
450- extensions = ['png' ])
451- def test_basic_wrap ():
452- fig = plt .figure ()
453- plt .axis ([0 , 10 , 0 , 10 ])
454- t = "This is a really long string that I'd rather have wrapped so that" \
455- " it doesn't go outside of the figure, but if it's long enough it" \
456- " will go off the top or bottom!"
457- plt .text (4 , 1 , t , ha = 'left' , rotation = 15 , wrap = True )
458- plt .text (6 , 5 , t , ha = 'left' , rotation = 15 , wrap = True )
459- plt .text (5 , 5 , t , ha = 'right' , rotation = - 15 , wrap = True )
460- plt .text (5 , 10 , t , fontsize = 18 , style = 'oblique' , ha = 'center' ,
461- va = 'top' , wrap = True )
462- plt .text (3 , 4 , t , family = 'serif' , style = 'italic' , ha = 'right' , wrap = True )
463- plt .text (- 1 , 0 , t , ha = 'left' , rotation = - 15 , wrap = True )
464-
465-
466- @image_comparison (baseline_images = ['fonttext_wrap' ],
321+ ax .annotate ('+ pts' ,
322+ xytext = [30 , 20 ], textcoords = 'axes points' ,
323+ xy = [30 , 20 ], xycoords = 'axes points' , fontsize = 32 )
324+ ax .annotate ('- pts' ,
325+ xytext = [30 , - 20 ], textcoords = 'axes points' ,
326+ xy = [30 , - 20 ], xycoords = 'axes points' , fontsize = 32 ,
327+ va = 'top' )
328+ ax .annotate ('+ frac' ,
329+ xytext = [0.75 , 0.05 ], textcoords = 'axes fraction' ,
330+ xy = [0.75 , 0.05 ], xycoords = 'axes fraction' , fontsize = 32 )
331+ ax .annotate ('- frac' ,
332+ xytext = [0.75 , - 0.05 ], textcoords = 'axes fraction' ,
333+ xy = [0.75 , - 0.05 ], xycoords = 'axes fraction' , fontsize = 32 ,
334+ va = 'top' )
335+
336+ ax .annotate ('+ pixels' ,
337+ xytext = [160 , 25 ], textcoords = 'axes pixels' ,
338+ xy = [160 , 25 ], xycoords = 'axes pixels' , fontsize = 32 )
339+ ax .annotate ('- pixels' ,
340+ xytext = [160 , - 25 ], textcoords = 'axes pixels' ,
341+ xy = [160 , - 25 ], xycoords = 'axes pixels' , fontsize = 32 ,
342+ va = 'top' )
343+
344+
345+ @image_comparison (baseline_images = ['annotation_negative_fig_coords' ],
467346 extensions = ['png' ])
468- def test_font_wrap ():
469- fig = plt .figure ()
470- plt .axis ([0 , 10 , 0 , 10 ])
471- t = "This is a really long string that I'd rather have wrapped so that" \
472- " it doesn't go outside of the figure, but if it's long enough it" \
473- " will go off the top or bottom!"
474- plt .text (4 , - 1 , t , fontsize = 18 , family = 'serif' , ha = 'left' , rotation = 15 ,
475- wrap = True )
476- plt .text (6 , 5 , t , family = 'sans serif' , ha = 'left' , rotation = 15 , wrap = True )
477- plt .text (5 , 5 , t , weight = 'light' , ha = 'right' , rotation = - 15 , wrap = True )
478- plt .text (5 , 10 , t , weight = 'heavy' , ha = 'center' , va = 'top' , wrap = True )
479- plt .text (3 , 4 , t , family = 'monospace' , ha = 'right' , wrap = True )
480- plt .text (- 1 , 0 , t , fontsize = 14 , style = 'italic' , ha = 'left' , rotation = - 15 ,
481- wrap = True )
347+ def test_annotation_negative_fig_coords ():
348+ fig , ax = plt .subplots ()
349+
350+ ax .annotate ('+ pts' ,
351+ xytext = [10 , 120 ], textcoords = 'figure points' ,
352+ xy = [10 , 120 ], xycoords = 'figure points' , fontsize = 32 )
353+ ax .annotate ('- pts' ,
354+ xytext = [- 10 , 180 ], textcoords = 'figure points' ,
355+ xy = [- 10 , 180 ], xycoords = 'figure points' , fontsize = 32 ,
356+ va = 'top' )
357+ ax .annotate ('+ frac' ,
358+ xytext = [0.05 , 0.55 ], textcoords = 'figure fraction' ,
359+ xy = [0.05 , 0.55 ], xycoords = 'figure fraction' , fontsize = 32 )
360+ ax .annotate ('- frac' ,
361+ xytext = [- 0.05 , 0.5 ], textcoords = 'figure fraction' ,
362+ xy = [- 0.05 , 0.5 ], xycoords = 'figure fraction' , fontsize = 32 ,
363+ va = 'top' )
364+
365+ ax .annotate ('+ pixels' ,
366+ xytext = [50 , 50 ], textcoords = 'figure pixels' ,
367+ xy = [50 , 50 ], xycoords = 'figure pixels' , fontsize = 32 )
368+ ax .annotate ('- pixels' ,
369+ xytext = [- 50 , 100 ], textcoords = 'figure pixels' ,
370+ xy = [- 50 , 100 ], xycoords = 'figure pixels' , fontsize = 32 ,
371+ va = 'top' )
0 commit comments