Title: Issue · GitHub
Open Graph Title: Issue · matplotlib/matplotlib
X Title: Issue · matplotlib/matplotlib
Description: matplotlib: plotting with Python. Contribute to matplotlib/matplotlib development by creating an account on GitHub.
Open Graph Description: matplotlib: plotting with Python. Contribute to matplotlib/matplotlib development by creating an account on GitHub.
X Description: matplotlib: plotting with Python. Contribute to matplotlib/matplotlib development by creating an account on GitHub.
Opengraph URL: https://github.com/matplotlib/matplotlib
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Better argument checking of subplot definition in `add_subplot()`","articleBody":"\u003c!--To help us understand and resolve your issue, please fill out the form to the best of your ability.--\u003e\r\n\u003c!--You can feel free to delete the sections that do not apply.--\u003e\r\n\r\n### Bug report\r\n\r\n**Bug summary**\r\nThis `*** ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()` error is raised when executing the `bubble()` function in `cbook/__init__.py` file.\r\n\r\n\u003c!--A short 1-2 sentences that succinctly describes the bug--\u003e\r\n\r\n**Code for reproduction**\r\nUnfortunately I'm unable to provide an easy working example to reproduce the issue. I don't know how I ended up in this `bubble()` function, the line I wrote that triggered the error is:\r\n\r\n```\r\ncax=figure.add_axes([x, y, w, h])\r\n```\r\nWhen I tried composing a minimal example it worked fine.\r\n\r\n\r\n\r\n**Actual outcome**\r\n\r\n\u003c!--The output produced by the above code, which may be a screenshot, console output, etc.--\u003e\r\n\r\nBelow is the traceback:\r\n\r\n```\r\nTraceback (most recent call last):\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/pdb.py\", line 1314, in main\r\n pdb._runscript(mainpyfile)\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/pdb.py\", line 1233, in _runscript\r\n self.run(statement)\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/bdb.py\", line 400, in run\r\n exec cmd in globals, locals\r\n File \"\u003cstring\u003e\", line 1, in \u003cmodule\u003e\r\n File \"straighten_analysis_layers.py\", line 7, in \u003cmodule\u003e\r\n '''\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/site-packages/matplotlib/figure.py\", line 1152, in add_axes\r\n self.sca(a)\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/site-packages/matplotlib/figure.py\", line 1848, in sca\r\n self._axstack.bubble(a)\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/site-packages/matplotlib/figure.py\", line 121, in bubble\r\n return Stack.bubble(self, self._entry_from_axes(a))\r\n File \"/home/guangzhi/anaconda3/envs/cdat2b/lib/python2.7/site-packages/matplotlib/cbook/__init__.py\", line 1239, in bubble\r\n if o not in self._elements:\r\nValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\r\nUncaught exception. Entering post mortem debugging\r\n```\r\n\r\nI tried examining the `if o not in self._elements:` line it stopped at:\r\n\r\n```\r\n(Pdb) print o\r\n((((0.125, -0.09000000000000002, 0.20514705882352943, 0.1),), ()), (25, \u003cmatplotlib.axes._axes.Axes object at 0x7efbc85c0310\u003e))\r\n(Pdb) print self._elements\r\n[(((8, 3, 1), ()), (1, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbcaad6cd0\u003e)),\r\n (((8, 3, 4), ()), (2, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8d79490\u003e)),\r\n (((8, 3, 7), ()), (3, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8cf7c10\u003e)),\r\n (((8, 3, 10), ()), (4, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8c766d0\u003e)),\r\n (((8, 3, 13), ()), (5, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8c50990\u003e)),\r\n (((8, 3, 16), ()), (6, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8be4c10\u003e)),\r\n (((8, 3, 19), ()), (7, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8b6c6d0\u003e)),\r\n (((8, 3, 22), ()), (8, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8aec190\u003e)),\r\n (((8, 3, 2), ()), (9, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8c3e890\u003e)),\r\n(((8, 3, 5), ()), (10, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8cd1e50\u003e)),\r\n (((8, 3, 8), ()), (11, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8a7fb50\u003e)),\r\n (((8, 3, 11), ()), (12, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8a05610\u003e)),\r\n (((8, 3, 14), ()), (13, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc89820d0\u003e)), \r\n(((8, 3, 17), ()), (14, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc88f4b50\u003e)),\r\n (((8, 3, 20), ()), (15, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc887b610\u003e)),\r\n (((8, 3, 23), ()), (16, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc87f90d0\u003e)),\r\n (((8, 3, 3), ()), (17, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc873f3d0\u003e)),\r\n (((8, 3, 6), ()), (18, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc86f56d0\u003e)),\r\n (((8, 3, 9), ()), (19, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8673150\u003e)),\r\n (((8, 3, 12), ()), (20, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc873ff90\u003e)), \r\n(((8, 3, 15), ()), (21, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc88d6bd0\u003e)),\r\n (((8, 3, 18), ()), (22, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc89c32d0\u003e)), \r\n(((8, 3, 21), ()), (23, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc8ce7d90\u003e))\r\n, (((8, 3, 24), ()), (24, \u003cmatplotlib.axes._subplots.AxesSubplot object at 0x7efbc87560d0\u003e)), \r\n((((0.125, -0.09000000000000002, 0.20514705882352943, 0.1),), ()), (25, \u003cmatplotlib.axes._axes.Axes object at 0x7efbc85c0310\u003e))]\r\n(Pdb) self._elements[-1] == o\r\nTrue\r\n(Pdb) self._elements[-2] == o\r\n*** ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\r\n(Pdb) print\r\n\r\n(Pdb) \r\n\r\n(Pdb) o in set(self._elements)\r\nTrue\r\n(Pdb) np.any([np.all(i==o) for i in self._elements])\r\n*** ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()\r\n```\r\nSo it failed to do the equality comparison between `o` and elements in `self._elements`. As shown in the console output, `np.any([np.all(i==o) for i in self._elements])` doesn't work.\r\n\r\nI managed to get around this by using:\r\n```\r\nif o not in set(self._elements):\r\n```\r\nSimilarly for the same line in `remove()` in the same `cbook/__init__.py` file.\r\n\r\nAnd also for the line\r\n```\r\nif thiso == o:\r\n```\r\nis changed to\r\n```\r\nif set([thiso]) == set([o]):\r\n```\r\nNot entirely sure this is the correct way though.\r\n\r\n**Matplotlib version**\r\n\u003c!--Please specify your platform and versions of the relevant libraries you are using:--\u003e\r\n * Operating system: Linux Mint 19.1\r\n * Matplotlib version: 2.2.3 py27hb69df0a_0\r\n * Matplotlib backend (`print(matplotlib.get_backend())`): Qt5Agg\r\n * Python version: 2.7.17\r\n * Other libraries: probably not relevant.\r\n\r\nMatplotlib installed via `conda install matplotlib`\r\n\r\n\u003c!--Please tell us how you installed matplotlib and python e.g., from source, pip, conda--\u003e\r\n\u003c!--If you installed from conda, please specify which channel you used if not the default--\u003e\r\n\r\n","author":{"url":"https://github.com/Xunius","@type":"Person","name":"Xunius"},"datePublished":"2019-12-24T11:52:44.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":2},"url":"https://github.com/16016/matplotlib/issues/16016"}
| route-pattern | /:user_id/:repository/issues/:id(.:format) |
| route-controller | issues |
| route-action | show |
| fetch-nonce | v2:bff0ca17-3b60-7439-3824-6665fd03edc1 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D8A6:B319:322043:43FEFF:6A52EAA5 |
| html-safe-nonce | fef7454d96da6f4afca1f55362713afd8ebe3b700e8111171249365fa1fe7d1e |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEOEE2OkIzMTk6MzIyMDQzOjQzRkVGRjo2QTUyRUFBNSIsInZpc2l0b3JfaWQiOiI2MzgwMzc5NTU4NzMwOTg0MTAxIiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 90c35d08ec57762c39b3aead4330e57a2b091d847361d51c9c3bd5adb4a25e7c |
| hovercard-subject-tag | repository:1385122 |
| 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/matplotlib/matplotlib/issues/16016 |
| twitter:image | https://opengraph.githubassets.com/c30144758eec9e3324965530d5a5d5f25f1694c957399cc9975eb81431640b5e/matplotlib/matplotlib |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/c30144758eec9e3324965530d5a5d5f25f1694c957399cc9975eb81431640b5e/matplotlib/matplotlib |
| og:image:alt | matplotlib: plotting with Python. Contribute to matplotlib/matplotlib development by creating an account on GitHub. |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-cache |
| 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 | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width