Issue 1:
Bug report

When I try to run the tests, all the .svg tests fail because of an Inkscape crash. When a svg test runs, an Inkscape window opens:

Clicking through this leads to another window:

which then leads to the test crashing. My Inkscape version is Inkscape 1.0beta2 (2b71d25, 2019-12-03), installd through homebrew. Perhaps this is a compatability issue with Inkscape 1.0?

The full traceback is:

___________________________________________________________________________ test_clip_to_bbox[svg] ___________________________________________________________________________

self = <matplotlib.testing.compare._SVGConverter object at 0x7f9dc869d730>, orig = PosixPath('/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox.svg')
dest = PosixPath('/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox_svg.png')

def __call__(self, orig, dest):
old_inkscape = mpl._get_executable_info("inkscape").version < "1"
terminator = b"\n>" if old_inkscape else b"> "
if not hasattr(self, "_tmpdir"):
self._tmpdir = TemporaryDirectory()
if (not self._proc # First run.
or self._proc.poll() is not None): # Inkscape terminated.
env = {
**os.environ,
# If one passes e.g. a png file to Inkscape, it will try to
# query the user for conversion options via a GUI (even with
# `--without-gui`). Unsetting `DISPLAY` prevents this (and
# causes GTK to crash and Inkscape to terminate, but that'll
# just be reported as a regular exception below).
"DISPLAY": "",
# Do not load any user options.
"INKSCAPE_PROFILE_DIR": os.devnull,
}
# Old versions of Inkscape (e.g. 0.48.3.1) seem to sometimes
# deadlock when stderr is redirected to a pipe, so we redirect it
# to a temporary file instead. This is not necessary anymore as of
# Inkscape 0.92.1.
stderr = TemporaryFile()
self._proc = subprocess.Popen(
["inkscape", "--without-gui", "--shell"] if old_inkscape else
["inkscape", "--shell"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=stderr,
env=env, cwd=self._tmpdir.name)
# Slight abuse, but makes shutdown handling easier.
self._proc.stderr = stderr
try:
> self._read_until(terminator)

lib/matplotlib/testing/compare.py:191:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <matplotlib.testing.compare._SVGConverter object at 0x7f9dc869d730>, terminator = b'> '

def _read_until(self, terminator):
"""Read until the prompt is reached."""
buf = bytearray()
while True:
c = self._proc.stdout.read(1)
if not c:
> raise _ConverterError
E matplotlib.testing.compare._ConverterError

lib/matplotlib/testing/compare.py:115: _ConverterError

The above exception was the direct cause of the following exception:

expected = '/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox-expected.svg'
actual = '/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox.svg', tol = 0, in_decorator = True

def compare_images(expected, actual, tol, in_decorator=False):
"""
Compare two "image" files checking differences within a tolerance.

The two given filenames may point to files which are convertible to
PNG via the `.converter` dictionary. The underlying RMS is calculated
with the `.calculate_rms` function.

Parameters
----------
expected : str
The filename of the expected image.
actual : str
The filename of the actual image.
tol : float
The tolerance (a color value difference, where 255 is the
maximal difference). The test fails if the average pixel
difference is greater than this value.
in_decorator : bool
Determines the output format. If called from image_comparison
decorator, this should be True. (default=False)

Returns
-------
None or dict or str
Return *None* if the images are equal within the given tolerance.

If the images differ, the return value depends on *in_decorator*.
If *in_decorator* is true, a dict with the following entries is
returned:

- *rms*: The RMS of the image difference.
- *expected*: The filename of the expected image.
- *actual*: The filename of the actual image.
- *diff_image*: The filename of the difference image.
- *tol*: The comparison tolerance.

Otherwise, a human-readable multi-line string representation of this
information is returned.

Examples
--------
::

img1 = "./baseline/plot.png"
img2 = "./output/plot.png"
compare_images(img1, img2, 0.001)

"""
actual = os.fspath(actual)
if not os.path.exists(actual):
raise Exception("Output image %s does not exist." % actual)
if os.stat(actual).st_size == 0:
raise Exception("Output image file %s is empty." % actual)

# Convert the image to png
expected = os.fspath(expected)
if not os.path.exists(expected):
raise IOError('Baseline image %r does not exist.' % expected)
extension = expected.split('.')[-1]
if extension != 'png':
> actual = convert(actual, cache=False)

lib/matplotlib/testing/compare.py:390:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
lib/matplotlib/testing/compare.py:294: in convert
converter[path.suffix[1:]](path, newpath)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <matplotlib.testing.compare._SVGConverter object at 0x7f9dc869d730>, orig = PosixPath('/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox.svg')
dest = PosixPath('/Users/dstansby/github/matplotlib/result_images/test_patches/clip_to_bbox_svg.png')

def __call__(self, orig, dest):
old_inkscape = mpl._get_executable_info("inkscape").version < "1"
terminator = b"\n>" if old_inkscape else b"> "
if not hasattr(self, "_tmpdir"):
self._tmpdir = TemporaryDirectory()
if (not self._proc # First run.
or self._proc.poll() is not None): # Inkscape terminated.
env = {
**os.environ,
# If one passes e.g. a png file to Inkscape, it will try to
# query the user for conversion options via a GUI (even with
# `--without-gui`). Unsetting `DISPLAY` prevents this (and
# causes GTK to crash and Inkscape to terminate, but that'll
# just be reported as a regular exception below).
"DISPLAY": "",
# Do not load any user options.
"INKSCAPE_PROFILE_DIR": os.devnull,
}
# Old versions of Inkscape (e.g. 0.48.3.1) seem to sometimes
# deadlock when stderr is redirected to a pipe, so we redirect it
# to a temporary file instead. This is not necessary anymore as of
# Inkscape 0.92.1.
stderr = TemporaryFile()
self._proc = subprocess.Popen(
["inkscape", "--without-gui", "--shell"] if old_inkscape else
["inkscape", "--shell"],
stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=stderr,
env=env, cwd=self._tmpdir.name)
# Slight abuse, but makes shutdown handling easier.
self._proc.stderr = stderr
try:
self._read_until(terminator)
except _ConverterError as err:
> raise OSError("Failed to start Inkscape in interactive "
"mode") from err
E OSError: Failed to start Inkscape in interactive mode

lib/matplotlib/testing/compare.py:193: OSError

Matplotlib version

Operating system: macOS 10.15.5

Matplotlib version: master branh

Matplotlib backend (print(matplotlib.get_backend())): QT5Agg

Python version: 3.8.3

Other libraries: Inkscape 1.0beta2 (2b71d25, 2019-12-03), installd through homebrew

Issue 2:
Hi,

I think the fill_between function should take a drawstyle option. It would be both handy and consistent.

Here is a post from someone else requesting the feature, with a figure illustrating why this is needed:

http://old.nabble.com/fill_between-with-drawstyle-steps--td30172277.html

thank you