demo + utils venv
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
import pytest
|
||||
from matplotlib.testing.decorators import image_comparison
|
||||
import matplotlib.pyplot as plt
|
||||
import matplotlib.patches as mpatches
|
||||
import matplotlib.lines as mlines
|
||||
from matplotlib.offsetbox import (
|
||||
AnchoredOffsetbox, DrawingArea, _get_packed_offsets)
|
||||
|
||||
|
||||
@image_comparison(baseline_images=['offsetbox_clipping'], remove_text=True)
|
||||
def test_offsetbox_clipping():
|
||||
# - create a plot
|
||||
# - put an AnchoredOffsetbox with a child DrawingArea
|
||||
# at the center of the axes
|
||||
# - give the DrawingArea a gray background
|
||||
# - put a black line across the bounds of the DrawingArea
|
||||
# - see that the black line is clipped to the edges of
|
||||
# the DrawingArea.
|
||||
fig, ax = plt.subplots()
|
||||
size = 100
|
||||
da = DrawingArea(size, size, clip=True)
|
||||
bg = mpatches.Rectangle((0, 0), size, size,
|
||||
facecolor='#CCCCCC',
|
||||
edgecolor='None',
|
||||
linewidth=0)
|
||||
line = mlines.Line2D([-size*.5, size*1.5], [size/2, size/2],
|
||||
color='black',
|
||||
linewidth=10)
|
||||
anchored_box = AnchoredOffsetbox(
|
||||
loc='center',
|
||||
child=da,
|
||||
pad=0.,
|
||||
frameon=False,
|
||||
bbox_to_anchor=(.5, .5),
|
||||
bbox_transform=ax.transAxes,
|
||||
borderpad=0.)
|
||||
|
||||
da.add_artist(bg)
|
||||
da.add_artist(line)
|
||||
ax.add_artist(anchored_box)
|
||||
ax.set_xlim((0, 1))
|
||||
ax.set_ylim((0, 1))
|
||||
|
||||
|
||||
def test_offsetbox_clip_children():
|
||||
# - create a plot
|
||||
# - put an AnchoredOffsetbox with a child DrawingArea
|
||||
# at the center of the axes
|
||||
# - give the DrawingArea a gray background
|
||||
# - put a black line across the bounds of the DrawingArea
|
||||
# - see that the black line is clipped to the edges of
|
||||
# the DrawingArea.
|
||||
fig, ax = plt.subplots()
|
||||
size = 100
|
||||
da = DrawingArea(size, size, clip=True)
|
||||
bg = mpatches.Rectangle((0, 0), size, size,
|
||||
facecolor='#CCCCCC',
|
||||
edgecolor='None',
|
||||
linewidth=0)
|
||||
line = mlines.Line2D([-size*.5, size*1.5], [size/2, size/2],
|
||||
color='black',
|
||||
linewidth=10)
|
||||
anchored_box = AnchoredOffsetbox(
|
||||
loc='center',
|
||||
child=da,
|
||||
pad=0.,
|
||||
frameon=False,
|
||||
bbox_to_anchor=(.5, .5),
|
||||
bbox_transform=ax.transAxes,
|
||||
borderpad=0.)
|
||||
|
||||
da.add_artist(bg)
|
||||
da.add_artist(line)
|
||||
ax.add_artist(anchored_box)
|
||||
|
||||
fig.canvas.draw()
|
||||
assert not fig.stale
|
||||
da.clip_children = True
|
||||
assert fig.stale
|
||||
|
||||
|
||||
def test_offsetbox_loc_codes():
|
||||
# Check that valid string location codes all work with an AnchoredOffsetbox
|
||||
codes = {'upper right': 1,
|
||||
'upper left': 2,
|
||||
'lower left': 3,
|
||||
'lower right': 4,
|
||||
'right': 5,
|
||||
'center left': 6,
|
||||
'center right': 7,
|
||||
'lower center': 8,
|
||||
'upper center': 9,
|
||||
'center': 10,
|
||||
}
|
||||
fig, ax = plt.subplots()
|
||||
da = DrawingArea(100, 100)
|
||||
for code in codes:
|
||||
anchored_box = AnchoredOffsetbox(loc=code, child=da)
|
||||
ax.add_artist(anchored_box)
|
||||
fig.canvas.draw()
|
||||
|
||||
|
||||
def test_expand_with_tight_layout():
|
||||
# Check issue reported in #10476, and updated due to #10784
|
||||
fig, ax = plt.subplots()
|
||||
|
||||
d1 = [1, 2]
|
||||
d2 = [2, 1]
|
||||
ax.plot(d1, label='series 1')
|
||||
ax.plot(d2, label='series 2')
|
||||
ax.legend(ncol=2, mode='expand')
|
||||
|
||||
fig.tight_layout() # where the crash used to happen
|
||||
|
||||
|
||||
@pytest.mark.parametrize('wd_list',
|
||||
([(150, 1)], [(150, 1)]*3, [(0.1, 1)], [(0.1, 1)]*2))
|
||||
@pytest.mark.parametrize('total', (250, 100, 0, -1, None))
|
||||
@pytest.mark.parametrize('sep', (250, 1, 0, -1))
|
||||
@pytest.mark.parametrize('mode', ("expand", "fixed", "equal"))
|
||||
def test_get_packed_offsets(wd_list, total, sep, mode):
|
||||
# Check a (rather arbitrary) set of parameters due to successive similar
|
||||
# issue tickets (at least #10476 and #10784) related to corner cases
|
||||
# triggered inside this function when calling higher-level functions
|
||||
# (e.g. `Axes.legend`).
|
||||
_get_packed_offsets(wd_list, total, sep, mode=mode)
|
||||
Reference in New Issue
Block a user