Title: Error with linestyles rcParams entries under the form (on, off, ...) and a style context manager · Issue #9792 · matplotlib/matplotlib · GitHub
Open Graph Title: Error with linestyles rcParams entries under the form (on, off, ...) and a style context manager · Issue #9792 · matplotlib/matplotlib
X Title: Error with linestyles rcParams entries under the form (on, off, ...) and a style context manager · Issue #9792 · matplotlib/matplotlib
Description: Bug summary When defining an rcParams entry that is related to linestyle with an (on, off, ....) pattern, and using a style context manager somewhere in the code to temporarily apply other values of rcParams, an exception occurs. Code fo...
Open Graph Description: Bug summary When defining an rcParams entry that is related to linestyle with an (on, off, ....) pattern, and using a style context manager somewhere in the code to temporarily apply other values o...
X Description: Bug summary When defining an rcParams entry that is related to linestyle with an (on, off, ....) pattern, and using a style context manager somewhere in the code to temporarily apply other values o...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/9792
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Error with linestyles rcParams entries under the form (on, off, ...) and a style context manager","articleBody":"**Bug summary**\r\n\r\nWhen defining an rcParams entry that is related to linestyle with an (on, off, ....) pattern, and using a style context manager somewhere in the code to temporarily apply other values of rcParams, an exception occurs.\r\n\r\n**Code for reproduction**\r\n\r\nHere is an example with the grid linestyle. (Related [discussion](https://gitter.im/matplotlib/matplotlib?at=5a0bbdb9ba39a53f1a9f438d) on gitter.)\r\n\r\n```python\r\nimport matplotlib.pyplot as plt\r\nfrom matplotlib import rcParams\r\n\r\nrcParams[\"grid.linestyle\"] = (4, 4) # no error with something liked \"dotted\"\r\n\r\nfig = plt.figure()\r\n\r\nwith plt.style.context([\"default\"]):\r\n ax0 = fig.add_subplot(121)\r\n ax0.grid()\r\n\r\nax1 = fig.add_subplot(122)\r\nax1.grid()\r\n\r\n#fig.savefig(\"test.png\")\r\n```\r\n\r\n**Actual outcome**\r\n\r\nAn exception is raised. With Matplotlib 2.1.0 and the master branch:\r\n```\r\nValueError: Key grid.linestyle: linestyle (None, [4.0, 4.0]) is not a valid on-off ink sequence.\r\n```\r\n*See at the end of the post for the full traceback.*\r\n\r\nI think this is occurs when exiting the style context manager. It looks like the linestyle given as `(on, off, ...)` is internally processed and stored into a form `(offset, (on, off, ...))` that is actually not recognized by the line validator, which then raises an error when it is passed back to rcParams to restore the former style.\r\n\r\nPlease note that it may not even be due to the stricter linestyle validation that was introduced in Matplotlib 2.1 (#8040), as Matplotlib 2.0.2 as well as Matplotlib 1.5.3 also throw an exception, although slightly different:\r\n```\r\nValueError: You passed in an invalid linestyle, `(4, 4)`. See docs of Line2D.set_linestyle for valid values.\r\n```\r\n\r\n**Expected outcome**\r\n\r\nNo exception when exiting the style context manager, and a plot with 2 different grid linestyles, both defined through the dedicated \"grid.linestyle\" entry in rcParams.\r\n\r\n**Matplotlib version**\r\n\r\n * Operating system: Linux (Fedora 26)\r\n * Matplotlib version: 2.1.0 from conda, master, 1.5.3 and 2.0.2 from the git repo\r\n * Matplotlib backend (`print(matplotlib.get_backend())`): Qt5Agg\r\n * Python version: 3.6.3 from conda\r\n\r\n**Miscellaneous**\r\n\r\nThe full traceback of the exception (with Matplotlib from the master branch):\r\n```\r\n---------------------------------------------------------------------------\r\nTypeError Traceback (most recent call last)\r\n~/FOSS/matplotlib/lib/matplotlib/rcsetup.py in _validate_linestyle(ls)\r\n 939 \r\n--\u003e 940 return (None, validate_nseq_float()(ls))\r\n 941 \r\n\r\n~/FOSS/matplotlib/lib/matplotlib/rcsetup.py in __call__(self, s)\r\n 308 else val\r\n--\u003e 309 for val in s]\r\n 310 except ValueError:\r\n\r\n~/FOSS/matplotlib/lib/matplotlib/rcsetup.py in \u003clistcomp\u003e(.0)\r\n 308 else val\r\n--\u003e 309 for val in s]\r\n 310 except ValueError:\r\n\r\nTypeError: float() argument must be a string or a number, not 'NoneType'\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nValueError Traceback (most recent call last)\r\n~/FOSS/matplotlib/lib/matplotlib/__init__.py in __setitem__(self, key, val)\r\n 911 try:\r\n--\u003e 912 cval = self.validate[key](val)\r\n 913 except ValueError as ve:\r\n\r\n~/FOSS/matplotlib/lib/matplotlib/rcsetup.py in _validate_linestyle(ls)\r\n 945 raise ValueError(\"linestyle {!r} is not a valid on-off ink \"\r\n--\u003e 946 \"sequence.\".format(ls))\r\n 947 \r\n\r\nValueError: linestyle (None, [4.0, 4.0]) is not a valid on-off ink sequence.\r\n\r\nDuring handling of the above exception, another exception occurred:\r\n\r\nValueError Traceback (most recent call last)\r\n\u003cipython-input-7-3b8f6f6ce3da\u003e in \u003cmodule\u003e()\r\n 8 with plt.style.context([\"default\"]):\r\n 9 ax0 = fig.add_subplot(121)\r\n---\u003e 10 ax0.grid()\r\n 11 \r\n 12 ax1 = fig.add_subplot(122)\r\n\r\n~/anaconda3/envs/matplotlib_dev/lib/python3.6/contextlib.py in __exit__(self, type, value, traceback)\r\n 86 if type is None:\r\n 87 try:\r\n---\u003e 88 next(self.gen)\r\n 89 except StopIteration:\r\n 90 return False\r\n\r\n~/FOSS/matplotlib/lib/matplotlib/style/core.py in context(style, after_reset)\r\n 156 yield\r\n 157 finally:\r\n--\u003e 158 mpl.rcParams.update(initial_settings)\r\n 159 \r\n 160 \r\n\r\n~/anaconda3/envs/matplotlib_dev/lib/python3.6/_collections_abc.py in update(*args, **kwds)\r\n 839 if isinstance(other, Mapping):\r\n 840 for key in other:\r\n--\u003e 841 self[key] = other[key]\r\n 842 elif hasattr(other, \"keys\"):\r\n 843 for key in other.keys():\r\n\r\n~/FOSS/matplotlib/lib/matplotlib/__init__.py in __setitem__(self, key, val)\r\n 912 cval = self.validate[key](val)\r\n 913 except ValueError as ve:\r\n--\u003e 914 raise ValueError(\"Key %s: %s\" % (key, str(ve)))\r\n 915 dict.__setitem__(self, key, cval)\r\n 916 except KeyError:\r\n\r\nValueError: Key grid.linestyle: linestyle (None, [4.0, 4.0]) is not a valid on-off ink sequence.\r\n```","author":{"url":"https://github.com/afvincent","@type":"Person","name":"afvincent"},"datePublished":"2017-11-15T23:00:03.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":4},"url":"https://github.com/9792/matplotlib/issues/9792"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:6446b8cd-1f40-e607-1bc1-886a89bf9e0e |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D822:31F1D8:3D5348:580957:6A54853D |
| html-safe-nonce | e6eee7c43325e3ba078f962849b45d27a92791a6307fc1d05a5532d02581d398 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEODIyOjMxRjFEODozRDUzNDg6NTgwOTU3OjZBNTQ4NTNEIiwidmlzaXRvcl9pZCI6IjI4NTQ3MDE5OTI3NjQ1NDAyMjEiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 8c3350ea76287cee8a8f1f8cb210e5ff00bc399b3aca277351db4bca7e5836b0 |
| hovercard-subject-tag | issue:274335598 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/9792/issue_layout |
| twitter:image | https://opengraph.githubassets.com/3a90ec321ad5989c0199c02460ca61f2c105020af11aa05399ebb92cfc412daf/matplotlib/matplotlib/issues/9792 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/3a90ec321ad5989c0199c02460ca61f2c105020af11aa05399ebb92cfc412daf/matplotlib/matplotlib/issues/9792 |
| og:image:alt | Bug summary When defining an rcParams entry that is related to linestyle with an (on, off, ....) pattern, and using a style context manager somewhere in the code to temporarily apply other values o... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | afvincent |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 03ccb116376fd46e8ba2a4cdc541e35f13f70734 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width