Title: Implicit addition of "color" to property_cycle breaks semantics · Issue #6380 · matplotlib/matplotlib · GitHub
Open Graph Title: Implicit addition of "color" to property_cycle breaks semantics · Issue #6380 · matplotlib/matplotlib
X Title: Implicit addition of "color" to property_cycle breaks semantics · Issue #6380 · matplotlib/matplotlib
Description: In the 2.x branch, the recent addition of the CN feature also added an implicit assumption that "color" will always be in the property cycle. This conflicts with the feature of prop_cycle that it only advances for a plotting function if ...
Open Graph Description: In the 2.x branch, the recent addition of the CN feature also added an implicit assumption that "color" will always be in the property cycle. This conflicts with the feature of prop_cycle that it o...
X Description: In the 2.x branch, the recent addition of the CN feature also added an implicit assumption that "color" will always be in the property cycle. This conflicts with the feature of prop_cycle...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/6380
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Implicit addition of \"color\" to property_cycle breaks semantics","articleBody":"In the 2.x branch, the recent addition of the CN feature also added an implicit assumption that \"color\" will always be in the property cycle. This conflicts with the feature of prop_cycle that it only advances for a plotting function if the user does not specify at least one of the properties made available by the property cycle.\n\nThis is important because several plotting functions will make multiple calls to plot()/fill() under the hood, but should have already advanced the cycle. Also, this mimics pre-1.5 behavior of the color_cycle where it did not advance if color was already specified.\n\nThe test (which is currently being modified to paper over the problem) which noticed this change is the following:\n\n```\n fig, ax = plt.subplots()\n ax.set_prop_cycle('linewidth', [2, 4])\n for c in range(1, 4):\n ax.plot(np.arange(10), c * np.arange(10), lw=0.1)\n ax.plot(np.arange(10), 4 * np.arange(10))\n ax.plot(np.arange(10), 5 * np.arange(10))\n```\n\nIn the v1.5.x branch, this would result in the cycler _not_ being advanced for the first three lines, and then two lines are made with linewidths of 2 and 4 in that order. In 2.x branch, the cycler gets advanced because of the implicit inclusion of \"color\" to the property cycle. Therefore, the cycler has a property which is not specified by the user, and it thinks it needs to advance itself. This results in a plot that has three thin lines and then a line of width 4 and then 2 (because of the odd number of plot calls prior).\n\nNow, consider the following scenario:\n\n```\n fig, ax = plt.subplots()\n ax.set_prop_cycle('color', 'rb')\n for c in range(1, 4):\n ax.plot(np.arange(10), c * np.arange(10), color='k')\n ax.plot(np.arange(10), 4 * np.arange(10))\n ax.plot(np.arange(10), 5 * np.arange(10))\n```\n\nIn this case, the cycler will _not_ advance for the first three plots, but will for the last two -- as expected. This difference in behavior will cause confusion among users, and will be very difficult to explain.\n\nI shall re-iterate my design concept behind the property-cycle feature that I added for v1.5: \"Color is not special!\". I am fine with having a failover mechanism for \"C0\" in the case that color isn't in the cycler, but to actually modify the cycler provided by the user only leads to confusion. What would we do when we want to expand the \"CN\" notation to other properties? Are we going to start implicitly include them into the property cycle as well?\n","author":{"url":"https://github.com/WeatherGod","@type":"Person","name":"WeatherGod"},"datePublished":"2016-05-07T13:00:28.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":9},"url":"https://github.com/6380/matplotlib/issues/6380"}
| 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:22717939-d0e8-38e4-965a-9556df6d6d3a |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | C2E4:1A1862:FA82C:16516A:6A5358F0 |
| html-safe-nonce | 431e596f86fd7603269e49aa218529498ff08c0042e8408c620b751bf86dd379 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJDMkU0OjFBMTg2MjpGQTgyQzoxNjUxNkE6NkE1MzU4RjAiLCJ2aXNpdG9yX2lkIjoiMjE2NjMzODQ4MzE5ODg0MzEyMCIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | c5ac77045aa408503bcada87061a574f1581bc1713674a32e0cfce1bb8817e90 |
| hovercard-subject-tag | issue:153593281 |
| 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/6380/issue_layout |
| twitter:image | https://opengraph.githubassets.com/e47ce2e648956cc85953634f065ff860a7e54eb29f44540b6ecc0a20ec8575db/matplotlib/matplotlib/issues/6380 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/e47ce2e648956cc85953634f065ff860a7e54eb29f44540b6ecc0a20ec8575db/matplotlib/matplotlib/issues/6380 |
| og:image:alt | In the 2.x branch, the recent addition of the CN feature also added an implicit assumption that "color" will always be in the property cycle. This conflicts with the feature of prop_cycle that it o... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | WeatherGod |
| 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 | 07a982c1d40157c619b364352b704c3ce66bb332 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width