Repository: sunpy/sunpy

Issue:
MapSequence animator somehow breaks the norm when it animates
My nice hmi sequence just goes black as soon as I update the animation


Discussion:
Do you have a self contained reproducible example?
https://gist.github.com/ee20b0c196c33b4fe79dd13495f44383

Resolving patch:
diff --git a/sunpy/map/mapbase.py b/sunpy/map/mapbase.py
--- a/sunpy/map/mapbase.py
+++ b/sunpy/map/mapbase.py
@@ -1604,7 +1604,8 @@ def submap(self, bottom_left, *, top_right=None, width: (u.deg, u.pix) = None, h
                 not in [[True, False, False], [False, False, False], [False, True, True]]):
             raise ValueError("Either top_right alone or both width and height must be specified.")
         # parse input arguments
-        pixel_corners = u.Quantity(self._parse_submap_input(bottom_left, top_right, width, height)).T
+        pixel_corners = u.Quantity(self._parse_submap_input(
+            bottom_left, top_right, width, height)).T
 
         # The pixel corners result is in Cartesian order, so the first index is
         # columns and the second is rows.
@@ -2230,7 +2231,8 @@ def contour(self, level, **kwargs):
                 level = level.to_value(self.unit)
             # Catch cases where level can't be converted or isn't a Quantity
             except (AttributeError, u.UnitConversionError) as e:
-                raise u.UnitsError(f'level must be an astropy quantity convertible to {self.unit}') from e
+                raise u.UnitsError(
+                    f'level must be an astropy quantity convertible to {self.unit}') from e
 
         contours = measure.find_contours(self.data, level=level, **kwargs)
         contours = [self.wcs.array_index_to_world(c[:, 0], c[:, 1]) for c in contours]
diff --git a/sunpy/visualization/animator/mapsequenceanimator.py b/sunpy/visualization/animator/mapsequenceanimator.py
--- a/sunpy/visualization/animator/mapsequenceanimator.py
+++ b/sunpy/visualization/animator/mapsequenceanimator.py
@@ -73,10 +73,7 @@ def updatefig(self, val, im, slider):
         i = int(val)
         im.set_array(self.data[i].data)
         im.set_cmap(self.mapsequence[i].plot_settings['cmap'])
-
         norm = deepcopy(self.mapsequence[i].plot_settings['norm'])
-        # The following explicit call is for bugged versions of Astropy's ImageNormalize
-        norm.autoscale_None(self.data[i].data)
         im.set_norm(norm)
 
         if wcsaxes_compat.is_wcsaxes(im.axes):


Test patch:
diff --git a/docs/dev_guide/contents/tests.rst b/docs/dev_guide/contents/tests.rst
--- a/docs/dev_guide/contents/tests.rst
+++ b/docs/dev_guide/contents/tests.rst
@@ -251,14 +251,30 @@ If the hashes do not match, the figure has changed, and thus the test is conside
 To run the figure tests you need to be very careful, as any pixel that has changed, will change the hash.
 In order to avoid changes due to different package versions, we recommend using tox::
 
-    $ tox -e figure
+    $ tox -e py38-figure
 
 This will ensure that any figures created are checked using the package versions that were used to create the original figure hashes.
 Running this will create a folder, "figure_test_images", within your work folder ("<local clone location>/figure_test_images"), which is ignored by git.
 Inside this folder will be all the images created, as well as a json file with the hashes of the figures created by the test run.
-The current hashes are located within "sunpy/tests/figure_tests_env_py36.json" and this will be where you will need to update old hashes or create new figure entries if anything changes.
+The current hashes are located within "sunpy/tests/figure_hashes_mpl_<ver>_ft_<ver>_astropy_<ver>.json" and this will be where you will need to update old hashes or create new figure entries if anything changes.
+The filenames are the versions of matplotlib, freetype and astropy used.
+If these versions differ to your local setup, the figure tests will not run.
 
-If you are adding a new figure test, you will also need to update this `repository <https://github.com/sunpy/sunpy-figure-tests>`__ that stores the current figure tests, which we use for a visual comparison of figure tests.
+If you are adding a new figure test you will need to do a few more steps::
+
+    $ tox -e py38-figure -- --mpl-generate-hash-library=sunpy/tests/figure_hashes_mpl_332_ft_261_astropy_403.json
+
+and for the development figure tests::
+
+    $ tox -e py38-figure-devdeps -- --mpl-generate-hash-library=sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev.json
+
+This will run the figure test suite and update the hashes stored.
+
+If you want to check what the images look like, you can do::
+
+    $ tox -e py38-figure -- --mpl-generate-path=baseline
+
+The images output from the tests will be stored in a folder called baseline so you can double check the test works as you expected.
 
 Writing doctests
 ----------------
diff --git a/sunpy/map/tests/test_mapsequence.py b/sunpy/map/tests/test_mapsequence.py
--- a/sunpy/map/tests/test_mapsequence.py
+++ b/sunpy/map/tests/test_mapsequence.py
@@ -11,6 +11,7 @@
 import sunpy
 import sunpy.data.test
 import sunpy.map
+from sunpy.tests.helpers import figure_test
 from sunpy.util.metadata import MetaDict
 
 
@@ -157,7 +158,7 @@ def test_repr(mapsequence_all_the_same, mapsequence_different_maps):
 
 def test_derotate():
     with pytest.raises(NotImplementedError):
-        mapsequence = sunpy.map.MapSequence(derotate=True)
+        sunpy.map.MapSequence(derotate=True)
 
 
 def test_repr_html(mapsequence_all_the_same):
@@ -181,3 +182,11 @@ def test_quicklook(mapsequence_all_the_same):
 
         for m in mapsequence_all_the_same.maps:
             assert m._repr_html_() in html_string
+
+
+@figure_test
+def test_norm_animator(hmi_test_map):
+    seq = sunpy.map.Map([hmi_test_map, hmi_test_map], sequence=True)
+    ani = seq.peek()
+    ani._slider_changed(1, ani.sliders[ani.active_slider]._slider)
+    return ani.fig
diff --git a/sunpy/tests/figure_hashes_mpl_332_ft_261_astropy_403.json b/sunpy/tests/figure_hashes_mpl_332_ft_261_astropy_403.json
--- a/sunpy/tests/figure_hashes_mpl_332_ft_261_astropy_403.json
+++ b/sunpy/tests/figure_hashes_mpl_332_ft_261_astropy_403.json
@@ -1,54 +1,55 @@
 {
-    "sunpy.map.tests.test_compositemap.test_peek_composite_map": "a90c67c1f6b8c6818b7a9dfc44e74248ef1e47a830ef21710b15f0c9e518e96f",
-    "sunpy.map.tests.test_compositemap.test_plot_composite_map": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
-    "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
-    "sunpy.map.tests.test_plotting.test_draw_contours_aia": "8ade014395359ca6cc8428af7294fb0b79cc63cc5c2ab87f83d03fe513055e40",
-    "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "5d7221e2d43aefffc4ef30b020fb7207b8d7f42dc5fd97dea25a6d351b7c5cc7",
-    "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "eae3267f21837571a7b10bf1e2fe0f672cf59c11ebefa4e5eadc3e9906609be3",
-    "sunpy.map.tests.test_plotting.test_heliographic_peek": "d8f4042d62f7ec00f1c9ddcd477a1c0133e87953864bf40fc676726d1da2909d",
-    "sunpy.map.tests.test_plotting.test_heliographic_rectangle_top_right": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
-    "sunpy.map.tests.test_plotting.test_heliographic_rectangle_width_height": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
-    "sunpy.map.tests.test_plotting.test_peek_aia171": "bbff0c076e8e21d6d888898d2952183cadc25fdbd81fce808602ed51aab1cbbe",
-    "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "711b826471e6a7e65c56fe49bb203ebcdbc084a31b94146ebec1cada65e04806",
-    "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "65de3e3b99ddeea2a27ebc6c65cd2d2296e08d2f0ed188599a469728b002fd2b",
-    "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "23d3c95df35606cef4dc9392796412412ba06382f21203fc9b28754b713889ea",
-    "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "9d083f30fda1aed9436e7b81b3d689d97a39db0cb2fc13e382a93dfe20be518b",
-    "sunpy.map.tests.test_plotting.test_plot_aia171": "1e5435af7bb854d47ebeabf354350f27bf989325aa5d77b930bdcdb043ce25df",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "241cb73a89ca5d80b9eb673e6e0fda97b842b38be3ea3f25c06e2f8aeb6a4dfc",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_nowcsaxes": "6e9cdda3aa9ed603f4be536634543ce8c1a6718b79aed57f850a187f8150446e",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "b147682850aad35e4c414de836c5880dcdba9f9e9fed13e53854b6685dffb39f",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel_nowcsaxes": "d516c9d6a28fecdf0bde1e9a0c4663fd625a2bfb9e91f158cd1c6ed0eb06e906",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "2dff076c0eaaf5cf5849ad541b434bfbda00d99491db51eb35d2ab0ee729bbb2",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_nowcsaxes": "69e28235fa42379a94f7da6cc39b375f361d1e26dc0f94e6b8c5f05894cc64c7",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "154586d5635f895b5f9170353f70f427e23ab0be4ccabf743e668864653f54e3",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_nowcsaxes": "ec4cfe2687ea0a1f62f1a80f07e69ef5a89ef5aa2dbebc58599fb16b98ebafcb",
-    "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "06ed44d872a6e1e5ec2dd6a522ee81f68a2c8420dea1bc7491bc64d9e3d3e147",
-    "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
-    "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_esp_peek": "d069eee419c45875cffe9a10c3262f83b3d28ccf7f13ee66ca1b99fe557f09b8",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_eve_peek": "2a22f93af44971411800e4fcd0d93d2128fe2b9e6b97e576e8372c2cd12d7d78",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_fermi_gbm_peek": "a0addeae9ec0eda509c976e9058b2d90fa748b2c3d4a64df43b3a064d85f34d9",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "73a71e717b7dd0dd345f0f8a8bfa7f06387607417b3ecd123adfd8f630f93d51",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_goes_peek": "5e8a20ed592398ac710798e7995ba7da158743d974820508656b2ba3bf62e152",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_lyra_peek": "d134646089aa9cb217b798e61fbfbfdcf6acf50a18f9292e95294d2cae6d24ea",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_ind_peek": "1bea3a56178db101abca168bc51e127b7b96f9eed58d74e3d19b6ffc14643e80",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_pre_peek": "4c4a4a299ed04547a70ea8da89871e05a897d5f8937d5cefc0359d04cf079c04",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_ind_peek": "01fa7e5baa13f996f686d18505f177f0884deb394384a129522aa18f9c6b61ac",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_pre_peek": "fbda770f164bd38a7741d3393e9f93040b188e928521cc53379ba2b78beb582c",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_norh_peek": "7450e024d469cb16e7b6c3b8b2b5a69c667a9cb9a4aa8da168dfb8c9c54aa07f",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_rhessi_peek": "ffd453337e44d613db520d0bf64966d812223f4e3bec8222d6fb7e4cbc4b4756",
-    "sunpy.visualization.animator.tests.test_basefuncanimator.test_lineanimator_figure": "dbf47ab983a844621f912b2f5a2d9ee657d3f661678c16a07afc7217f50e3fd4",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "58e799859b877fd8a5f73377eeab2686f0567241093c244779143797d4cef778",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "157c52fdcf235e09ebb5389f1d9c0957795e73f695fa1a839b077259f9fb8240",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "460980d5e2d2b06e1b7ce07613f2169078edc759515ca1c1cff242f72cca1158",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "89557041abcb08e3b0c22a1a2679d0874c396162c438ff587579215a826bac3b",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "b0c1889ee9c2da5e47e4903229b4633c49cca78735513449698143ac015fb16a",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "f079c64d4c5f0dd82fe748deb22e481bddb1ef1523d202c139d4717403d778de",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "03ab823148c6071a81c9edad2bc58e0c0b401a3dcf5108d749a80ac0f24a07b7",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "1676a6fd6ba95e3ac725a9ef37f4dd1e1acb09886b8781f32d3d29e7c50794c4",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "377a48ea45516d91bd483e0044868d2a2da0bb45569ed15ead305987ad18dc00",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params": "e1678a7b513917e177547b8ee0a93ee2f29a6d3dacff5fa213355ff414e706b1",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "4bb5930ec573f8399470df023d4686601728d35a70527c397f7eed39d07ba0e3",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "ce35b25eb2c4eb6d2ce56d6a78c8a33b1bfdf8ef00b098c7c2c08feae2a82356",
-    "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "453d75b2a1c180c31363fdb2faa3f60bc4433ded53dde4678e91b7986f85bf00"
+  "sunpy.map.tests.test_compositemap.test_plot_composite_map": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
+  "sunpy.map.tests.test_compositemap.test_peek_composite_map": "a90c67c1f6b8c6818b7a9dfc44e74248ef1e47a830ef21710b15f0c9e518e96f",
+  "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
+  "sunpy.map.tests.test_mapsequence.test_norm_animator": "a400eef26fdd915ccf12769031bd8dadedbf8f6a93e31cd5982bffe2484702ee",
+  "sunpy.map.tests.test_plotting.test_plot_aia171": "1e5435af7bb854d47ebeabf354350f27bf989325aa5d77b930bdcdb043ce25df",
+  "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "06ed44d872a6e1e5ec2dd6a522ee81f68a2c8420dea1bc7491bc64d9e3d3e147",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "241cb73a89ca5d80b9eb673e6e0fda97b842b38be3ea3f25c06e2f8aeb6a4dfc",
+  "sunpy.map.tests.test_plotting.test_peek_aia171": "bbff0c076e8e21d6d888898d2952183cadc25fdbd81fce808602ed51aab1cbbe",
+  "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "711b826471e6a7e65c56fe49bb203ebcdbc084a31b94146ebec1cada65e04806",
+  "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "23d3c95df35606cef4dc9392796412412ba06382f21203fc9b28754b713889ea",
+  "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "9d083f30fda1aed9436e7b81b3d689d97a39db0cb2fc13e382a93dfe20be518b",
+  "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "5d7221e2d43aefffc4ef30b020fb7207b8d7f42dc5fd97dea25a6d351b7c5cc7",
+  "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "65de3e3b99ddeea2a27ebc6c65cd2d2296e08d2f0ed188599a469728b002fd2b",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_nowcsaxes": "6e9cdda3aa9ed603f4be536634543ce8c1a6718b79aed57f850a187f8150446e",
+  "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
+  "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "2dff076c0eaaf5cf5849ad541b434bfbda00d99491db51eb35d2ab0ee729bbb2",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_nowcsaxes": "69e28235fa42379a94f7da6cc39b375f361d1e26dc0f94e6b8c5f05894cc64c7",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "b147682850aad35e4c414de836c5880dcdba9f9e9fed13e53854b6685dffb39f",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel_nowcsaxes": "d516c9d6a28fecdf0bde1e9a0c4663fd625a2bfb9e91f158cd1c6ed0eb06e906",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "154586d5635f895b5f9170353f70f427e23ab0be4ccabf743e668864653f54e3",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_nowcsaxes": "ec4cfe2687ea0a1f62f1a80f07e69ef5a89ef5aa2dbebc58599fb16b98ebafcb",
+  "sunpy.map.tests.test_plotting.test_draw_contours_aia": "8ade014395359ca6cc8428af7294fb0b79cc63cc5c2ab87f83d03fe513055e40",
+  "sunpy.map.tests.test_plotting.test_heliographic_peek": "d8f4042d62f7ec00f1c9ddcd477a1c0133e87953864bf40fc676726d1da2909d",
+  "sunpy.map.tests.test_plotting.test_heliographic_rectangle_width_height": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
+  "sunpy.map.tests.test_plotting.test_heliographic_rectangle_top_right": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
+  "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "eae3267f21837571a7b10bf1e2fe0f672cf59c11ebefa4e5eadc3e9906609be3",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_eve_peek": "2a22f93af44971411800e4fcd0d93d2128fe2b9e6b97e576e8372c2cd12d7d78",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_esp_peek": "d069eee419c45875cffe9a10c3262f83b3d28ccf7f13ee66ca1b99fe557f09b8",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_fermi_gbm_peek": "a0addeae9ec0eda509c976e9058b2d90fa748b2c3d4a64df43b3a064d85f34d9",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_norh_peek": "7450e024d469cb16e7b6c3b8b2b5a69c667a9cb9a4aa8da168dfb8c9c54aa07f",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_goes_peek": "5e8a20ed592398ac710798e7995ba7da158743d974820508656b2ba3bf62e152",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_lyra_peek": "d134646089aa9cb217b798e61fbfbfdcf6acf50a18f9292e95294d2cae6d24ea",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_rhessi_peek": "ffd453337e44d613db520d0bf64966d812223f4e3bec8222d6fb7e4cbc4b4756",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_ind_peek": "1bea3a56178db101abca168bc51e127b7b96f9eed58d74e3d19b6ffc14643e80",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_ind_peek": "01fa7e5baa13f996f686d18505f177f0884deb394384a129522aa18f9c6b61ac",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_pre_peek": "4c4a4a299ed04547a70ea8da89871e05a897d5f8937d5cefc0359d04cf079c04",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_pre_peek": "fbda770f164bd38a7741d3393e9f93040b188e928521cc53379ba2b78beb582c",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "73a71e717b7dd0dd345f0f8a8bfa7f06387607417b3ecd123adfd8f630f93d51",
+  "sunpy.visualization.animator.tests.test_basefuncanimator.test_lineanimator_figure": "dbf47ab983a844621f912b2f5a2d9ee657d3f661678c16a07afc7217f50e3fd4",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "03ab823148c6071a81c9edad2bc58e0c0b401a3dcf5108d749a80ac0f24a07b7",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "460980d5e2d2b06e1b7ce07613f2169078edc759515ca1c1cff242f72cca1158",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "377a48ea45516d91bd483e0044868d2a2da0bb45569ed15ead305987ad18dc00",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "1676a6fd6ba95e3ac725a9ef37f4dd1e1acb09886b8781f32d3d29e7c50794c4",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "89557041abcb08e3b0c22a1a2679d0874c396162c438ff587579215a826bac3b",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "b0c1889ee9c2da5e47e4903229b4633c49cca78735513449698143ac015fb16a",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "f079c64d4c5f0dd82fe748deb22e481bddb1ef1523d202c139d4717403d778de",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "58e799859b877fd8a5f73377eeab2686f0567241093c244779143797d4cef778",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "157c52fdcf235e09ebb5389f1d9c0957795e73f695fa1a839b077259f9fb8240",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params": "e1678a7b513917e177547b8ee0a93ee2f29a6d3dacff5fa213355ff414e706b1",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "ce35b25eb2c4eb6d2ce56d6a78c8a33b1bfdf8ef00b098c7c2c08feae2a82356",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "4bb5930ec573f8399470df023d4686601728d35a70527c397f7eed39d07ba0e3",
+  "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "453d75b2a1c180c31363fdb2faa3f60bc4433ded53dde4678e91b7986f85bf00"
 }
diff --git a/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev.json b/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev.json
--- a/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev.json
+++ b/sunpy/tests/figure_hashes_mpl_dev_ft_261_astropy_dev.json
@@ -1,54 +1,55 @@
 {
-    "sunpy.map.tests.test_compositemap.test_peek_composite_map": "2bbe873f63c7504447c229f880962a60fd1fcf7b8916388210ef8f9002654afa",
-    "sunpy.map.tests.test_compositemap.test_plot_composite_map": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
-    "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
-    "sunpy.map.tests.test_plotting.test_draw_contours_aia": "47b99639e1493626370c296a74eff1450182cbf86d25c784846c1b5258169e0d",
-    "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "5d7221e2d43aefffc4ef30b020fb7207b8d7f42dc5fd97dea25a6d351b7c5cc7",
-    "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "eae3267f21837571a7b10bf1e2fe0f672cf59c11ebefa4e5eadc3e9906609be3",
-    "sunpy.map.tests.test_plotting.test_heliographic_peek": "650f4e9ad9ae71e58e2c33f4843202f52edf9ea393c874e0b288de0788e16e5d",
-    "sunpy.map.tests.test_plotting.test_heliographic_rectangle_top_right": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
-    "sunpy.map.tests.test_plotting.test_heliographic_rectangle_width_height": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
-    "sunpy.map.tests.test_plotting.test_peek_aia171": "c19f20b06e6a2fb721f7d3fc9fd60653fdc73454bcd8dbbc0637ba29187008b8",
-    "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "303f622c0c15cf5613a15c6dccb52953a52f3acb52a42f5e11c8a64a4b493086",
-    "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "58247a0ca97e3a453bd3a78d15feb391767de6c7fd7e4940bd081db1b0f4faaa",
-    "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "349b964410d2935abb65f8cf98ba7450fe7da53c50f2c632b5b080efc93d36f0",
-    "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "a9c991bcc89fb2901437cd72f6b5bf82a3f7c2b5d5486c81acb217b1ba95f1e4",
-    "sunpy.map.tests.test_plotting.test_plot_aia171": "1e5435af7bb854d47ebeabf354350f27bf989325aa5d77b930bdcdb043ce25df",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "241cb73a89ca5d80b9eb673e6e0fda97b842b38be3ea3f25c06e2f8aeb6a4dfc",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_nowcsaxes": "6e9cdda3aa9ed603f4be536634543ce8c1a6718b79aed57f850a187f8150446e",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "b147682850aad35e4c414de836c5880dcdba9f9e9fed13e53854b6685dffb39f",
-    "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel_nowcsaxes": "d516c9d6a28fecdf0bde1e9a0c4663fd625a2bfb9e91f158cd1c6ed0eb06e906",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "2dff076c0eaaf5cf5849ad541b434bfbda00d99491db51eb35d2ab0ee729bbb2",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_nowcsaxes": "69e28235fa42379a94f7da6cc39b375f361d1e26dc0f94e6b8c5f05894cc64c7",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "154586d5635f895b5f9170353f70f427e23ab0be4ccabf743e668864653f54e3",
-    "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_nowcsaxes": "ec4cfe2687ea0a1f62f1a80f07e69ef5a89ef5aa2dbebc58599fb16b98ebafcb",
-    "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "d07b653c762bf20478ea33e9712e4eacd7bd0a0fc8dbe16964e8b4374f40120d",
-    "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
-    "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_esp_peek": "d069eee419c45875cffe9a10c3262f83b3d28ccf7f13ee66ca1b99fe557f09b8",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_eve_peek": "2a22f93af44971411800e4fcd0d93d2128fe2b9e6b97e576e8372c2cd12d7d78",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_fermi_gbm_peek": "a0addeae9ec0eda509c976e9058b2d90fa748b2c3d4a64df43b3a064d85f34d9",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "73a71e717b7dd0dd345f0f8a8bfa7f06387607417b3ecd123adfd8f630f93d51",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_goes_peek": "5e8a20ed592398ac710798e7995ba7da158743d974820508656b2ba3bf62e152",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_lyra_peek": "d134646089aa9cb217b798e61fbfbfdcf6acf50a18f9292e95294d2cae6d24ea",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_ind_peek": "1bea3a56178db101abca168bc51e127b7b96f9eed58d74e3d19b6ffc14643e80",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_pre_peek": "4c4a4a299ed04547a70ea8da89871e05a897d5f8937d5cefc0359d04cf079c04",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_ind_peek": "01fa7e5baa13f996f686d18505f177f0884deb394384a129522aa18f9c6b61ac",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_pre_peek": "fbda770f164bd38a7741d3393e9f93040b188e928521cc53379ba2b78beb582c",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_norh_peek": "7450e024d469cb16e7b6c3b8b2b5a69c667a9cb9a4aa8da168dfb8c9c54aa07f",
-    "sunpy.timeseries.tests.test_timeseriesbase.test_rhessi_peek": "ffd453337e44d613db520d0bf64966d812223f4e3bec8222d6fb7e4cbc4b4756",
-    "sunpy.visualization.animator.tests.test_basefuncanimator.test_lineanimator_figure": "dbf47ab983a844621f912b2f5a2d9ee657d3f661678c16a07afc7217f50e3fd4",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "58e799859b877fd8a5f73377eeab2686f0567241093c244779143797d4cef778",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "157c52fdcf235e09ebb5389f1d9c0957795e73f695fa1a839b077259f9fb8240",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "460980d5e2d2b06e1b7ce07613f2169078edc759515ca1c1cff242f72cca1158",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "76d23dd55302f95fd7185db807f05fc10ab0e7bc84b54ef2881cdbdd978e52cd",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "5c503d9f26caf038936b1edb23b7d3963b3af0d1aef63fc22f1c621446407370",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "4a28bcbd429c0ea891dd40ef4f587939b7ff1fc75f1b564cd7e97dcbbfbc50c3",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "03ab823148c6071a81c9edad2bc58e0c0b401a3dcf5108d749a80ac0f24a07b7",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "52af2bd727302c27526e5c4c459ae1a5e7e452c193164a77095febb0d0412dfd",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "377a48ea45516d91bd483e0044868d2a2da0bb45569ed15ead305987ad18dc00",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params": "e1678a7b513917e177547b8ee0a93ee2f29a6d3dacff5fa213355ff414e706b1",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "4bb5930ec573f8399470df023d4686601728d35a70527c397f7eed39d07ba0e3",
-    "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "ce35b25eb2c4eb6d2ce56d6a78c8a33b1bfdf8ef00b098c7c2c08feae2a82356",
-    "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "453d75b2a1c180c31363fdb2faa3f60bc4433ded53dde4678e91b7986f85bf00"
+  "sunpy.map.tests.test_compositemap.test_plot_composite_map": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
+  "sunpy.map.tests.test_compositemap.test_peek_composite_map": "2bbe873f63c7504447c229f880962a60fd1fcf7b8916388210ef8f9002654afa",
+  "sunpy.map.tests.test_compositemap.test_plot_composite_map_linewidths": "7d8ab4c0ffecd45de6e2829fa343bb289e107fd3ce4bcc8e7243673f7e472d99",
+  "sunpy.map.tests.test_mapsequence.test_norm_animator": "a400eef26fdd915ccf12769031bd8dadedbf8f6a93e31cd5982bffe2484702ee",
+  "sunpy.map.tests.test_plotting.test_plot_aia171": "1e5435af7bb854d47ebeabf354350f27bf989325aa5d77b930bdcdb043ce25df",
+  "sunpy.map.tests.test_plotting.test_plot_rotated_aia171": "d07b653c762bf20478ea33e9712e4eacd7bd0a0fc8dbe16964e8b4374f40120d",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_clip": "241cb73a89ca5d80b9eb673e6e0fda97b842b38be3ea3f25c06e2f8aeb6a4dfc",
+  "sunpy.map.tests.test_plotting.test_peek_aia171": "c19f20b06e6a2fb721f7d3fc9fd60653fdc73454bcd8dbbc0637ba29187008b8",
+  "sunpy.map.tests.test_plotting.test_peek_grid_aia171": "303f622c0c15cf5613a15c6dccb52953a52f3acb52a42f5e11c8a64a4b493086",
+  "sunpy.map.tests.test_plotting.test_peek_grid_spacing_aia171": "349b964410d2935abb65f8cf98ba7450fe7da53c50f2c632b5b080efc93d36f0",
+  "sunpy.map.tests.test_plotting.test_peek_limb_aia171": "a9c991bcc89fb2901437cd72f6b5bf82a3f7c2b5d5486c81acb217b1ba95f1e4",
+  "sunpy.map.tests.test_plotting.test_draw_grid_aia171": "5d7221e2d43aefffc4ef30b020fb7207b8d7f42dc5fd97dea25a6d351b7c5cc7",
+  "sunpy.map.tests.test_plotting.test_peek_grid_limb_aia171": "58247a0ca97e3a453bd3a78d15feb391767de6c7fd7e4940bd081db1b0f4faaa",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_nowcsaxes": "6e9cdda3aa9ed603f4be536634543ce8c1a6718b79aed57f850a187f8150446e",
+  "sunpy.map.tests.test_plotting.test_rectangle_aia171_width_height": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
+  "sunpy.map.tests.test_plotting.test_rectangle_aia171_top_right": "455246d338564add5be94c1dc0ff5740a90d21d8ef7da9f392ba3a01237ef5b8",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171": "2dff076c0eaaf5cf5849ad541b434bfbda00d99491db51eb35d2ab0ee729bbb2",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_nowcsaxes": "69e28235fa42379a94f7da6cc39b375f361d1e26dc0f94e6b8c5f05894cc64c7",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel": "b147682850aad35e4c414de836c5880dcdba9f9e9fed13e53854b6685dffb39f",
+  "sunpy.map.tests.test_plotting.test_plot_aia171_superpixel_nowcsaxes": "d516c9d6a28fecdf0bde1e9a0c4663fd625a2bfb9e91f158cd1c6ed0eb06e906",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel": "154586d5635f895b5f9170353f70f427e23ab0be4ccabf743e668864653f54e3",
+  "sunpy.map.tests.test_plotting.test_plot_masked_aia171_superpixel_nowcsaxes": "ec4cfe2687ea0a1f62f1a80f07e69ef5a89ef5aa2dbebc58599fb16b98ebafcb",
+  "sunpy.map.tests.test_plotting.test_draw_contours_aia": "47b99639e1493626370c296a74eff1450182cbf86d25c784846c1b5258169e0d",
+  "sunpy.map.tests.test_plotting.test_heliographic_peek": "650f4e9ad9ae71e58e2c33f4843202f52edf9ea393c874e0b288de0788e16e5d",
+  "sunpy.map.tests.test_plotting.test_heliographic_rectangle_width_height": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
+  "sunpy.map.tests.test_plotting.test_heliographic_rectangle_top_right": "f1dc10238c83fbdf510d1f912c921fe3b53f437f9a46f3b71ad46b48273369fb",
+  "sunpy.map.tests.test_plotting.test_heliographic_grid_annotations": "eae3267f21837571a7b10bf1e2fe0f672cf59c11ebefa4e5eadc3e9906609be3",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_eve_peek": "2a22f93af44971411800e4fcd0d93d2128fe2b9e6b97e576e8372c2cd12d7d78",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_esp_peek": "d069eee419c45875cffe9a10c3262f83b3d28ccf7f13ee66ca1b99fe557f09b8",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_fermi_gbm_peek": "a0addeae9ec0eda509c976e9058b2d90fa748b2c3d4a64df43b3a064d85f34d9",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_norh_peek": "7450e024d469cb16e7b6c3b8b2b5a69c667a9cb9a4aa8da168dfb8c9c54aa07f",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_goes_peek": "5e8a20ed592398ac710798e7995ba7da158743d974820508656b2ba3bf62e152",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_lyra_peek": "d134646089aa9cb217b798e61fbfbfdcf6acf50a18f9292e95294d2cae6d24ea",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_rhessi_peek": "ffd453337e44d613db520d0bf64966d812223f4e3bec8222d6fb7e4cbc4b4756",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_ind_peek": "1bea3a56178db101abca168bc51e127b7b96f9eed58d74e3d19b6ffc14643e80",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_ind_peek": "01fa7e5baa13f996f686d18505f177f0884deb394384a129522aa18f9c6b61ac",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_json_pre_peek": "4c4a4a299ed04547a70ea8da89871e05a897d5f8937d5cefc0359d04cf079c04",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_noaa_txt_pre_peek": "fbda770f164bd38a7741d3393e9f93040b188e928521cc53379ba2b78beb582c",
+  "sunpy.timeseries.tests.test_timeseriesbase.test_generic_ts_peek": "73a71e717b7dd0dd345f0f8a8bfa7f06387607417b3ecd123adfd8f630f93d51",
+  "sunpy.visualization.animator.tests.test_basefuncanimator.test_lineanimator_figure": "dbf47ab983a844621f912b2f5a2d9ee657d3f661678c16a07afc7217f50e3fd4",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_simple_plot": "03ab823148c6071a81c9edad2bc58e0c0b401a3dcf5108d749a80ac0f24a07b7",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_celestial_sliders": "460980d5e2d2b06e1b7ce07613f2169078edc759515ca1c1cff242f72cca1158",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_update_plot": "377a48ea45516d91bd483e0044868d2a2da0bb45569ed15ead305987ad18dc00",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_transpose_update_plot": "52af2bd727302c27526e5c4c459ae1a5e7e452c193164a77095febb0d0412dfd",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons": "76d23dd55302f95fd7185db807f05fc10ab0e7bc84b54ef2881cdbdd978e52cd",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_colorbar_buttons_default_labels": "5c503d9f26caf038936b1edb23b7d3963b3af0d1aef63fc22f1c621446407370",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_2d_extra_sliders": "4a28bcbd429c0ea891dd40ef4f587939b7ff1fc75f1b564cd7e97dcbbfbc50c3",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot": "58e799859b877fd8a5f73377eeab2686f0567241093c244779143797d4cef778",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_1d_update_plot_masked": "157c52fdcf235e09ebb5389f1d9c0957795e73f695fa1a839b077259f9fb8240",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params": "e1678a7b513917e177547b8ee0a93ee2f29a6d3dacff5fa213355ff414e706b1",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_no_ticks": "ce35b25eb2c4eb6d2ce56d6a78c8a33b1bfdf8ef00b098c7c2c08feae2a82356",
+  "sunpy.visualization.animator.tests.test_wcs.test_array_animator_wcs_coord_params_grid": "4bb5930ec573f8399470df023d4686601728d35a70527c397f7eed39d07ba0e3",
+  "sunpy.visualization.colormaps.tests.test_cm.test_cmap_visual": "453d75b2a1c180c31363fdb2faa3f60bc4433ded53dde4678e91b7986f85bf00"
 }
diff --git a/sunpy/timeseries/tests/test_timeseriesbase.py b/sunpy/timeseries/tests/test_timeseriesbase.py
--- a/sunpy/timeseries/tests/test_timeseriesbase.py
+++ b/sunpy/timeseries/tests/test_timeseriesbase.py
@@ -99,7 +99,7 @@ def noaa_ind_json_test_ts():
 @pytest.fixture
 def noaa_pre_json_test_ts():
     # NOAA pre data contains years long into the future, which ERFA complains about
-    with pytest.warns(ErfaWarning, match='dubious year'):
+    with pytest.warns(ErfaWarning, match=r'.*dubious year'):
         return sunpy.timeseries.TimeSeries(
             noaa_pre_json_filepath, source='NOAAPredictIndices')